Неявные приведения типов в атлантис или фичи =)

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Robis
Посетитель
Сообщения: 37
Зарегистрирован: 13 дек 2010, 16:55

Неявные приведения типов в атлантис или фичи =)

Сообщение Robis »

Казалось бы два одинаковых условия

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

if( case(5; 5: 2; 0) = 2 )
  Exit;

if( 2 = case(5; 5: 2; 0) )
  Exit;
Но не тут-то было. В первом случае мы получим FALSE, во втором TRUE. А всё потому, что первый Case возвращает строку '2' которая не равна 2.
Во втором случае возвращаемая строка неявно приводится к числу и получаем TRUE. Фича?
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Неявные приведения типов в атлантис или фичи =)

Сообщение KATZ »

Интересное наблюдение! Только причина вряд ли в неправильных неявных приведениях типов, скорее, где-то глубже. Пробовал считать в вычислителе выражений (по Ctrl-F4):
'2'=2 дает TRUE, 2='2' тоже дает TRUE.

А вот еще несколько интересных результатов на ту же тему:
case(1;1:255;0) дает 255
case(1;1:256;0) дает 0
case(1;1:257;0) дает 1

Повезло, что до сих пор я эту функцию в своих поделках не использовал...
Robis
Посетитель
Сообщения: 37
Зарегистрирован: 13 дек 2010, 16:55

Re: Неявные приведения типов в атлантис или фичи =)

Сообщение Robis »

Продолжаем наблюдения на тему..

case(1; 1:'qqq'; 0) = 3, case(1; 1:'qqqq'; 0) = 4, case(1; 1:'qqqq'; ' ') = 'qqqq'
case(1; 1:257; 0) = 1, case(1; 1:257; word(0)) = 257

Похоже на то что, перед возвращением результата функция приводит его к типу, указанному в Else.
Ответить