parser

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

 

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

о позднем связывании имён

Александр Петросян (PAF) 07.04.2005 12:06 / 07.04.2005 12:07

1. переопределив имя метода main в какое-то другое ($.main[xxx]) вы сказали: «дорогой process, скомпилируй тут этот вот метод, @xxx, я его потом-как-нибудь вызову». а Parser разбирается с методами объектов на ходу. при компиляции кода его не беспокоит отсутствие того или иного метода.

Parser здесь использует позднее связывание имён, позволяя сначала использовать метод/переменную, затем определить.

простейший пример:
@a[]
#здесь компилятор не ругается на отсутствие b
^b[]
@b[]
...
первая причина проста: Parser использует однопроходный компилятор, так быстрее.
вторая сложнее: в Parser можно добавлять свои поля и методы на ходу, вычисляя их имена. выходит, проверить наличие поле/метода на момент компиляции использующего это поле/метод фрагмента просто невозможно.

2. так создавать объекты нельзя, нужно
$var[^class::ctor[]]
у вас не видно внутри process никакого $var.