PDA

Просмотр полной версии : Неявное преобразование типов


offlight
07.08.2007, 15:28
Кто-нибудь может объяснить такую байду:

trace(typeof obj.interval); //Number. interval задана в классе как var interval:Number=0;
obj.interval=obj.xml.firstChild.attributes.interval;//атрибут некоего узла xml, тип String, естественно.
trace(typeof obj.interval);//String


То есть не только не возникает сообщение о несовместимости типов, но и вообще происходит неявное преобразование, причём к ПРАВОЙ части! как такое может быть?

версия Flash 8.

etc
07.08.2007, 15:39
Проверка типов происходит на стадии компиляции только. В AS3 была бы ошибка.

chingachgoog
07.08.2007, 15:47
у флеша динамический код (реальный), а всякие надстройки-интерфейсы (типа AS2) лишь для удобства (кому это удобно, другой вопрос :) ).

etc
07.08.2007, 15:51
Какой-какой код?

bbexp
07.08.2007, 16:49
offlight, а Вы понимаете что interval и obj.interval - это разные переменные?
obj.interval никак и не типизируется, почему и возможно переопределение.

etc
07.08.2007, 16:57
bbexp, написано же, что var interval это в классе. А obj является, соответственно, его экземпляром.

chingachgoog
07.08.2007, 17:05
Какой-какой код?

Динамический.
В AS тип переменной определяется интерпретатором динамически, в ходе выполнения программы.
(И в этом лично мне AS очень симпатичен)

offlight
07.08.2007, 23:27
offlight, а Вы понимаете что interval и obj.interval - это разные переменные?
__etc правильно сказал, interval - это переменная объекта obj.interval, поэтому по отдельности даже не рассматривается.
или это вы про obj.xml.firstChild.attributes.interval? это как раз другая переменная и есть. Это вообще даже не переменная :) это атрибут узла в xml файле, в этом как раз и суть вопроса.

Проверка типов происходит на стадии компиляции только. В AS3 была бы ошибка.
Ну да, похоже на то. Только flash 8, AS2 соответственно. То есть тип obj.xml.firstChild.attributes.interval не может быть определен на стадии компиляции, так? и дальнейшие проверки вообще не делаются? и может поменяться тип переменной, которая типизирована, так получается? или я чего-то не понял :cool: неожиданно.

etc
07.08.2007, 23:40
chingachgoog, очень жаль, что нравится. А мне вот не очень. И динамические переменные — это относится к AS1/AS2.

offlight, отказываться от типизации в таком случае не стоит совершенно. Но надо знать и преобразовывать явно, в случае аттрибутов XML.