Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Огромный идиотский минус AVM1 в логике (http://www.flasher.ru/forum/showthread.php?t=140079)

camelot 19.05.2010 18:09

Огромный идиотский минус AVM1 в логике
 
Код AS1/AS2:

trace( NaN == 0 );
trace( NaN < 0 );
trace( NaN > 0 );
trace( NaN >= 0 );
trace( NaN <= 0 );
 
trace("result:" + ((NaN >= 0) == (NaN > 0 || NaN == 0))  );

Очень многим людям это должно послужить очень хорошим уроком.
Это просто гиганский маразм адоба в логике или баг среды выполнения.
компилил в mtasc и в cs4. дебаг плеер 10
на поиск этого маразма потратил 6 часов. пришлось огромный проект на запчасти разбирать


з.ы. или я где-то и чего то не понимаю?

Psycho Tiger 19.05.2010 18:49

Nan >=0 - true.
Nan > 0 - undefined (false)
Nan == 0 - false

true == (false || false) ? false.

А вот сравнения NaNов и правда забавны.

camelot 20.05.2010 01:30

по логике, выражиние:
((NaN >= 0) == (NaN > 0 || NaN == 0)
должно быть:
false == (false || false) ? true

silin 20.05.2010 14:41

имо минус изначально в попытке сравнивать теплое с мягким

строку или мувиклип с нулем сравнивать не пробовали ?
ужасно нелогичные реультаты выдает

Psycho Tiger 20.05.2010 19:36

У меня NaN>=0 Flash 8 распознал как true.

camelot 25.05.2010 14:38

Цитата:

Сообщение от silin (Сообщение 909578)
имо минус изначально в попытке сравнивать теплое с мягким

строку или мувиклип с нулем сравнивать не пробовали ?
ужасно нелогичные реультаты выдает

Код AS1/AS2:

trace( _root == 0 ); //false
trace( _root < 0 ); // undefined (false)
trace( _root > 0 ); // undefined (false)
trace( _root >= 0 ); // true
trace( _root <= 0 ); // true
 
trace( "ABC" == 0 ); // false
trace( "ABC" < 0 ); // undefined (false)
trace( "ABC" > 0 ); // undefined (false)
trace( "ABC" >= 0 ); // undefined (false)
trace( "ABC" <= 0 ); // undefined (false)
 
trace( _root._visible == 0 ); // false
trace( _root._visible < 0 ); // false
trace( _root._visible > 0 ); // true
trace( _root._visible >= 0 ); // true
trace( _root._visible <= 0 ); // false
 
trace({} == 0 ); // false
trace({} < 0 ); // false
trace({} > 0 ); // false
trace({} >= 0 ); // true
trace({} <= 0 ); // true

я конешно понимаю что вы один из лучших флешеров рунета а может быть всей земли.
я так же понимаю что сравнивается тёплое или мягкое с цифрой. но должна же быть система логики. почему логика стринга отличается от логики мувиклипа или логики НеЦифры ?

iNils 25.05.2010 14:55

Какие моменты вас конкретно не устраивают?

Psycho Tiger 26.05.2010 15:52

Призадумался.
Код:

trace( _root == 0 ); //false OK
trace( _root < 0 ); // undefined (false) OK
trace( _root > 0 ); // undefined (false) OK
trace( _root >= 0 ); // true _root > 0 || _root ==0 - undefined || false - не очень ок


iNils 26.05.2010 16:12

Код:

trace( _root >= 0 ); // true _root > 0 || _root ==0 - undefined || false - не очень ок
Операция >= состоит из двух действий greaterThan и not, в рузльтате greaterThan дает undefined, а отрицания undefined дает true.

camelot 26.05.2010 16:45

Цитата:

Сообщение от iNils (Сообщение 911071)
Код:

trace( _root >= 0 ); // true _root > 0 || _root ==0 - undefined || false - не очень ок
Операция >= состоит из двух действий greaterThan и not, в рузльтате greaterThan дает undefined, а отрицания undefined дает true.

а как вы объясните ?

Код AS1/AS2:

trace( "ABC" == 0 ); // false
trace( "ABC" < 0 ); // undefined (false)
trace( "ABC" > 0 ); // undefined (false)
trace( "ABC" >= 0 ); // undefined (false)
trace( "ABC" <= 0 ); // undefined (false)

greaterThan даёт undefined ?
а отрициание undefiened в данном конкретном случае даёт false?


Часовой пояс GMT +4, время: 12:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.