Ответ
Misha v.3 19.12.2006 23:59
/ 20.12.2006 11:31
- возможность указать что для всего класса действует "локальность" переменных по умолчанию мне нравится
- мне не очень нравится такой синтаксис:
@USE
locals
т.к. он вносит дополнительное огрничение/несовместимость и использует @USE не по назначению. может лучше что-нить подобное:
@VAR
local
- мне даже нравится, что в этом случае нужно будет писать $self в конструкторах для того чтобы задать переменную класса. это будет явно и очевидно
- мне _очень_ не нравится предложеная возможность описать у конструктора хоть одну локальную переменную и таким образом получить возможность описывать поля класса без префиксов. и вот почему:
1. в приведенном примере определена, но не используется переменная i - она является первым кандидатом на удаление, ибо нечего делать в объявлениях неиспользуемым переменным.
2. @constructor[] и @constructor[][] очень сильно отличаются по сути без видимого отличия синтаксиса.
3. @constructor[] может запросто превратиться в @constructor[][потребовавшаяся_локальная_переменная] (и наоборот) и это потребует просмотра и изменения кода конструктора и добавление префикса $self определяемым переменным класса. т.е. лишь по присутствию описания локальных переменных переключать поведение не стоит (хотя по какому-нить [local] в принципе можно, только в данном случае слово 'local' не отражает сути происходящего, но ведь есть ещё и 'global', которым можно явно включать глобальность определения переменных в методе при включенной локальности в классе %-) )
4. сейчас мне не ясно, как будет работать такое:
@constructor[][i]
^declare_vars[]
@declare_vars[]
$i(1)