Последняя версия DataExpress 3 beta от 9 мая 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Совместимость перечисляемых типов

Справочная информация, руководства, видеоматериалы от пользователей DataExpress.
Zenitchik
Интересующийся
Сообщения: 66
Зарегистрирован: Чт мар 08, 2018 1:07 am

Совместимость перечисляемых типов

Сообщение Zenitchik » Сб апр 21, 2018 11:29 pm

В Object Pascal присваивание переменным разных перечисляемых типов значений не своего типа приводит к ошибке несовместимости типов.


В RemObjects Pascal Script - не приводит. Из-за этого возможны труднообнаружимые ошибки. Очень не советую давать константам разных перечислимых типов созвучные имена.

jurist23rus
Эксперт
Сообщения: 2701
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 24 раза

Re: Совместимость перечисляемых типов

Сообщение jurist23rus » Вс апр 22, 2018 10:01 am

Например?
Destiny is a very convenient word for those who never take decisions.

Zenitchik
Интересующийся
Сообщения: 66
Зарегистрирован: Чт мар 08, 2018 1:07 am

Re: Совместимость перечисляемых типов

Сообщение Zenitchik » Вс апр 22, 2018 2:03 pm

Код: Выделить всё

TFileMaskOperation = (maskConcat, maskOr, maskElement, maskWrap, maskSaveStart, maskSaveEnd, maskRepeat, maskNullable);
 
TFileMaskOperationStack = (maskStackBottom, maskStackBracket, maskStackOr, maskStackConcat, maskStackElement);
 


Код: Выделить всё

function FileMaskEvalStack_operation(operation:TFileMaskOperation; freeNode:word; var stack:array of word; var top:word):TFileMaskNode;
begin
  result.operation := operation;
  if operation in [maskConcat, maskOr] then begin
    result.twoOperand := stack[top];
    dec(top);
    result.operand := stack[top];
  end
{... здесь другие варианты (не буду цитировать полностью) }
  else begin
    result.operand := stack[top];
  end;
  stack[top] := freeNode;
end;   


Случайно передал в функцию maskStackConcat вместо maskConcat и долго искал, откуда берётся maskWrap там, где его быть не должно.

Zenitchik
Интересующийся
Сообщения: 66
Зарегистрирован: Чт мар 08, 2018 1:07 am

Re: Совместимость перечисляемых типов

Сообщение Zenitchik » Вс апр 22, 2018 3:01 pm

В Object Pascal присваивание переменным разных перечисляемых типов значений не своего типа приводит к ошибке несовместимости типов.


Однако компилятор Pascal Script не увидит ошибку и код будет работать. Будьте внимательны.


А всё-таки, зачем писать в справке взаимоисключающие параграфы?

jurist23rus
Эксперт
Сообщения: 2701
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 24 раза

Re: Совместимость перечисляемых типов

Сообщение jurist23rus » Вс апр 22, 2018 4:51 pm

Тогда у меня к вам встречный вопрос. А какой смысл обсуждать это на форуме, если вы нашли ошибку в справке? Зайдите на wiki и исправьте ошибку, а можете ещё и от себя добавить пару глав, никто против не будет. :)
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 4905
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 33 раза
Поблагодарили: 252 раза

Re: Совместимость перечисляемых типов

Сообщение admin » Вс апр 22, 2018 6:45 pm

Чтоб в курсе были.