Показать сообщение отдельно
Старый 24.07.2012, 15:29
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Тут тяжело предупредить, нужно понимать как работает оператор "фильтр". Т.е. xml.(expression) - вот это.

Работает он очень похоже на with, и поэтому возможны похожие казусы, но компилятору трудно понять, что это не то, что хотелось. Т.е. что происходит внутри фильтра:
в цепочку областей видимости добавляется текущий узел (который мы сейчас просматриваем), а все связывания объявленные внутри фильтра ищутся в этой цепочке. Таким образом, если связывание не находится у текущего узла, то его будут искать дальше во всех доступных звеньях цепочки (все импорты, this, super и т.д.).
Вообще, поведение этого оператора на столько не предсказуемо и может измениться динамически в уже скомпилированой программе, что я бы поостерегся его использовать. Или, по крайней мере использовать его исключительно со связываниями в которых однозначно указан объект которому они принадлежат, например:
Код AS3:
xml.(valueOf().@attribute)
- нормально, т.как valueOf() однозначно существует у текущего узла.
Код AS3:
xml.(this.field)
- нормально т.как компилятор подставит именно поле класса а не что-то другое.
Во всех остальных случаях вы рискуете обратится к свойству чего-то о чем вы вообще ничего не знаете и в каких-то очень редких случаях можете таким образом случайно выдать секретную информацию.
__________________
Hell is the possibility of sanity