|
|
|||||
Регистрация: Jul 2009
Сообщений: 48
|
Странный глюк при работе с XML.
Кто нибудь знает в чем может быть проблема?
Вот эта функция не работает. public function setAnimations(setName:String):void {trace(Game.xmlData.units.unit.(@name == setName));} А вот так работает: public function setAnimations(setName:String):void {var str:String = setName; trace(Game.xmlData.units.unit.(@name == str));} Разобрался. setName, которое я опрометчиво использовал в качестве имени параметра, видимо используется где-то еще. Очень жаль что Flash при компиляции даже в strict-mode о таких вещах не предупреждает. Последний раз редактировалось nldr; 23.07.2012 в 18:23. |
|
|||||
.
|
Похоже на баг компилятора. Начался с примерно 4.0 Flash Builder SDK. У меня споткнулось на имени параметра как "name".
|
|
|||||
Modus ponens
|
Тут тяжело предупредить, нужно понимать как работает оператор "фильтр". Т.е. xml.(expression) - вот это.
Работает он очень похоже на with, и поэтому возможны похожие казусы, но компилятору трудно понять, что это не то, что хотелось. Т.е. что происходит внутри фильтра: в цепочку областей видимости добавляется текущий узел (который мы сейчас просматриваем), а все связывания объявленные внутри фильтра ищутся в этой цепочке. Таким образом, если связывание не находится у текущего узла, то его будут искать дальше во всех доступных звеньях цепочки (все импорты, this, super и т.д.). Вообще, поведение этого оператора на столько не предсказуемо и может измениться динамически в уже скомпилированой программе, что я бы поостерегся его использовать. Или, по крайней мере использовать его исключительно со связываниями в которых однозначно указан объект которому они принадлежат, например: - нормально, т.как valueOf() однозначно существует у текущего узла. - нормально т.как компилятор подставит именно поле класса а не что-то другое. Во всех остальных случаях вы рискуете обратится к свойству чего-то о чем вы вообще ничего не знаете и в каких-то очень редких случаях можете таким образом случайно выдать секретную информацию.
__________________
Hell is the possibility of sanity |
|
|||||
Modus ponens
|
А что значит "споткнулся"?
Были баги связаные с e4x. Возможно что-то исправили. Код почти наверняка ошибка @name - XMLList и получить тот же XMLList в том же контекте но по-другому - можно, конечно, если специально, но практический смысл этого кода вызывает подозрения. Если бы там было два равно, тогда можно было бы подумать, что делается неявное приведение типов, а так - почти наверняка такой код будет всегда false.
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 10:30. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , xml , баг |
|
|