Ответ
Misha v.3 30.04.2011 15:12
да, выглядит не совсем логично. просто вызов GET_DEFAULT происходит при обращении к необъявленным переменным, а не неопределённым. в случае [a], эта переменная уже есть в scope локальных переменных.
да и вообще, открою страшную тайну: на самом деле сейчас locals это совсем НЕ то-же самое, что и объявление всех переменных, используемых в методе, локальными.
locals говорит, что в случае ЗАПИСИ в неопределённую переменную эту переменную надо автоматически сделать локальной.
т.е. если есть переменная _класса_, у метода написано [locals], и переменной с таким именем в методе ничего не присваивается, то при обращении к ней произойдёт обращение к переменной класса.