parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Никаких особых подводных камней нет

G_Z 11.01.2014 02:25 / 11.01.2014 02:54

@OPTIONS
locals # по умолчанию все переменные класса / объекта локальные

@init[hOptions]
$self._hOptions[^hash::create[$hOptions]] # для того, чтобы переменная _hOptions стала полем объекта, нужно явно указать это через self

@show[]
$self._hOptions.iSomeId # и так же через self к ней обращаться
[]
Так, указанная опция locals автоматически объявит локальными все переменные во всех методах определяемого класса. Если она указана, то для обращения к полям объекта или класса необходимо пользоваться системной переменной self.
Либо для отдельных методов, тогда поведение меняется только у переменных метода.
@init[hOptions] обычный конструктор
$_hOptions[^hash::create[$hOptions]]

@show[_hOptions][locals]
$self._hOptions.iSomeId # поле объекта
$_hOptions.iSomeId      # локальная переменная
[]
Если в методе явно объявить локальную переменную locals, это будет равносильно объявлению всех переменных, используемых в нем локальными.
Для обращения к переменных класса или объекта в этом случае необходимо использовать self.
Выделенное полужирным не совсем верно, потому что при locals у метода к полю объекта можно обратиться и без self — он требуется лишь в случае неоднозначности (как в примере выше — приоритет у локальной переменной и она найдётся первой).