Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 18.07.2002, 01:37
  № 1  
Suhoff
Guest

Сообщений: n/a
По умолчанию Занимательный ActionScript (ч.III)

В FrameActions пишем такой скрипт:

0[0]=0(0);

Хотя смысла в этом скрипте нет никакого, но такие выражения допускаются в AS (!!!!). Запускаем на выполнение... получаем swf... декомпилируем flasm'ом- получаем:

frame 0
push 0.0, 0.0, 0.0, 1
callFunction
setMember
end // of frame 0

ОПА!!! Откуда взялась единица????!!!! В выражении её нет и в помине!!!
Вот если бы мы записали выражение в виде:

0[0]=1(0);

тогда всё было бы точно, а так получается, что в AS 0==1 (!!!) Забавно...
Более того.... можно записать это выражение в виде

0[0]=N(0)

где N- числовой литерал (любое целое число) и при этом результат всё равно будет один и тот же:

frame 0
push 0.0, 0.0, 0.0, 1
callFunction
setMember
end // of frame 0

те в AS любое целое число равно единице!!!!
.......
Как говорила Алиса "... чем дальше - тем чудесатее и чудесатее..."

PS. Кстати... Сравнение - 0[0]==0(0) даёт true!! Те одна полная фигня равна другой полной фигне... Отсюда вывод - программе по-фигу какую фигню Вы в неё напишите.....

Старый 18.07.2002, 04:00
CyberMax вне форума Посмотреть профиль Отправить личное сообщение для CyberMax Найти все сообщения от CyberMax
  № 2  
CyberMax
 
Аватар для CyberMax

Регистрация: Dec 2000
Адрес: Moscow, Russia
Сообщений: 204
Отправить сообщение для CyberMax с помощью ICQ
По умолчанию Сухов, ты глючиш !

сабж (только без обид).

Единица это количество параметров передаваемых функции с именем "0".
Цитата:
PS. Кстати... Сравнение - 0[0]==0(0) даёт true!! Те одна полная фигня равна другой полной фигне...
И тут тоже все правильно. И 0[0] и 0(0) равны одному и тому же. А именно == undefined. Так что все правильно.

PS Кстати ничего абсурдного в записях типа 0[0] и 0(0) нет. Функции и переменные с такими именами существовать могут.

Код:
this['0'] = function(n) { 
trace("\tФигню говорите, адназначно ! Аргумент равен "+n);
}

0(1812);
PPS
__________________
Wbr, CyberMax

Старый 18.07.2002, 21:08
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 3  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Да ладно вам, пацаны, я недавно [i] написал (с пустотой перед скобками), чтобы опустить мешающий this - снямало... правда, эээ, не сработало...
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 19.07.2002, 01:27
  № 4  
Suhoff
Guest

Сообщений: n/a
Звиняте, господа...Звиняйте.... Обшибочка-с вышла-с.....
Действительно, "1" - это количество параметров функции....
Всё правильно... да.... Всё правильно.......
.....Только постойте!!!!! Количество параметров ЧЕГО????? Где, скажите пожалуйста, ИМЯ вызываемой функции?? А??
Если мы запишем

0[0]=foo(0)

то получим при декомпиляции flasm'ом -

frame 0
push 0.0, 0.0, 0.0, 1 , 'foo'
callFunction
setMember
end // of frame 0

Это понятно......
А в нашем случае - где имя функции???? Нету!!!!!!
Поэтому AS по-фигу, чему равно N в выражении

0[0]=N(0)

N может равнятся любому числу (кстати, не только целому), результат от N не зависит!!!!
Это и ввело меня в заблуждение...Так что мой глюк я могу смело разделить с господами из Micromedia..

2CyberMax
... То что такие операции (записи) в AS допустимы - я знаю. Об этом я сказал в начале предыдущего сообщения...
Вообще в AS много "интересных" допустимых грамматикой операций.... Ну, например, навскидку....

~void null;

flasm даёт -
frame 0
push NULL
pop
push UNDEF, 4294967295.0
bitwiseXor
pop
end // of frame 0

что в переводе означает, что производится операция -

undefined^0xffffffff

Ну ничего не боится AS!!!! Ему по-фигу....

Ещё..... Когда пишешь this['0'] не обязательно заключать ноль в кавычки (те считать ноль строкой). Можно написать и this[0] (те считать ноль числом) - это тоже самое...
Согласно ECMA-262 -
................
ObjectLiteral : See 11.1.5
{ }
{ PropertyNameAndValueList }

PropertyNameAndValueList : See 11.1.5
PropertyName : AssignmentExpression
PropertyNameAndValueList , PropertyName : AssignmentExpression

PropertyName : See 11.1.5
Identifier
StringLiteral
NumericLiteral
............................
Те именем свойства объекта может быть и численный литерал.....
И ещё .... О той функции, что ты привёл в качестве примера.... Согласно вышеизложенному эта функция работет только в том варианте, что у тебя записана ....
this[0]=function(){.......};
вызываем -> 0();(или что ТОЖЕ САМОЕ null(); )--> получаем результат...
Если мы запишем
this[1]=function(){.......};
и вызовем ТАКУЮ функцию -> 1(); то получим полный фиг-вам....!!!!
Функция то в наличии имеется, а вот вызвать её - не получится......
Насчёт моего PS. Это, конечно, была шутка... Хотя, как говорится. в кождой шутке есть только ДОЛЯ шутки... Просто в голове не укладывается что сравнивая две НЕОПРЕДЕЛЁННЫЕ величины мы получаем ИСТИНА... В голову приходит такая сценка....
".....
Судья-
... господа присяжные заседатели... Неустановленное лицо в неустановленное время в неустановленном месте совершило , а может быть и не совершило, неустановленное деяние.... Вы должны вынести вердикт - виновно ли это лицо.....
Присяжные (хором)-
...ДА!! ДА!! Виновен!!!!....Виновен!!!!....
Судья-
...На основании вердикта присяжных суд выностит приговор!!! Неустановленное лицо приговаривается к неопределённому сроку в неопределённом месте с произвольным режимом... "
Ну не абсурд ли??? А???
Мне кажется, что было бы более логичным, если бы в операциях сравнения (Х rel_op Y) при значении одного из операндов X или Y (или обоих вместе) 'undefined' результат тоже был бы 'undefined'. Те, если нет информации для принятия решения, то результат - неопределён.Конечно, этому препятствует то, что в булевой логике есть только два значения - true и false. Но в конце концов - почему бы не отойти от булевой логики и не ввести в логику третье значение - (true, false, UNDEFINED)!!! Инструкция IF, например, могла бы выглядеть тогда следующим образом -

IF (condition) E_TRUE Statement1 E_FALSE Statement2 E_UNDEF Statement3;

Statement1 выполняется когда значение condition==true
Statement2 выполняется когда значение condition==false
Statement3 выполняется когда значение condition==undefined

Why not???? как говорится.... Есть же на белом свете "fuzzy" логика??? И, говорят, прекрасно работает....
....Ладно... Всё это уже мои фантазии на тему... Пойду-ка я, лучше, почитаю про "fuzzy" логику ... Может что интересное узнаю....

Всем - пока!

PS 2DeliMIter
Смотрим ECMA-262 -
......
ArrayLiteral : See 11.1.4
[ Elision_opt ]
[ ElementList ]
[ ElementList , Elision_opt ]

ElementList : See 11.1.4
Elision_opt AssignmentExpression
ElementList , Elision_opt AssignmentExpression

Elision : See 11.1.4
,
Elision ,
.......
так что ничего удивительного в том, что выражение -> [i] схавало - нету ... Это ArrayLiteral.......

Старый 19.07.2002, 17:38
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 5  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Код:
this[0] = function() {
 . . .
}

. . .

this[0]();
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 20.07.2002, 01:30
  № 6  
Suhoff
Guest

Сообщений: n/a
2DeliMIter

Ты наверное имел в виду
Код:
this[1] = function() {.....}
.......
this[1]();
????
Да... я ошибся.... такую функцию можно вызвать вышеописанным способом.... Я это понял утром, когда проснулся... Но было уже поздно..
Воистину говорят - "Утро вечера мудреннее".
С уважением. Suhoff.

Создать новую тему   Часовой пояс GMT +4, время: 06:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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