parser

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

 

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

Ответ

MoKo 25.10.2015 02:41

Непонятно, почему переданный по ссылке метод — не выполняется и is junction,
Метод - это метод, чтобы он выполнился - его надо вызвать (^), да еще параметры передать. "is junction" - историческое отражение внутреннего устройства. Они по факту трех подтипов - код, метод и getter.
а код — взрывается в руках.
Да, обращение $code приводит к выполнению кода.
А насколько трудоёмко реализовать отдельный тип проверки is code для кода, который бы не приводил к выполнению?
Еще раз - вы неправильно понимаете последовательность действий. Сначала выполняется код, а затем результат выполнения идет параметром оператору is.

С точки зрения внутренней логики нет разницы между =$code= и $code is junction. Последовательность действий в первом случае (по факту конечно оптимальнее, тут важна суть):

записать '=' в стек
взять значение из стека и записать в текущий контекст вывода
получить элемент с именем code (в этот момент выполняется код) и записать его в стек.
взять значение из стека и записать в текущий контекст вывода
записать '=' в стек
взять значение из стека и записать в текущий контекст вывода

Последовательность действий во втором случае:
получить элемент с именем code (в этот момент выполняется код) и записать его в стек.
записать 'junction' в стек
вызвать оператор is с двумя параметрами из стека и поместить результат в стек.

То есть $value всегда приводит к одним и тем же действиям, и куда пойдет результат выполнения - оператору is или куда-то еще - неизвестно. То есть в теории можно попробовать понять, что результат пойдет именно is (не знаю как), и вызывать "не получить элемент", а "получить элемент без выполнения кода", корректно обработать не только $code, но и $$code, и $a.b.$c.code (подобное недавно делалось, тут потребуется добавление опкодов). В общем задача совсем непростая...