parser

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

 

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

трудности реализации тут огорчают

Александр Петросян (PAF) 14.12.2006 21:05 / 14.12.2006 21:06

разжёвываю про $caller.[local.i]

вот написали вы свой итератор:
@foreach[varName;...]
$caller.$varName(1)
...
и пользуетесь именем переменной, чтобы добраться до неё в контексте вызова ($caller.тут).

если вызывать так:
^foreach[i](...){...}
то всё понятно, получаем
$caller.i
и все довольны.

если же вызывать так:
^foreach[local.i](...){...}
то получаем
@foreach[varName;...]
#тут varName равно "local.i"
#и эта запись 
$caller.$varName(1)
#эквивалентна этому записи 
$caller.[local.i](1)
а такой переменной (с точкой в имени)
в контексте вызова, понятно, нет.

в принципе, проблемы нет при обращении к локальным переменным посматривать на префикс на ходу, и если он есть, отрезать перед просмотром списка локальных переменных.

однако, согласитесь, цена вопроса = торможение на обращении ко всем локальным переменным нас не устроит.

нужна идея.