parser

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

 

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

Помогите разобраться с контекстом выполнения ^process{}

Dmitri 24.09.2004 01:05

Есть три файла

class.p:
@CLASS
class

@create[cfg]
$self.cfg[$cfg]

@method[]
^if($self.cfg is 'hash'){hash}{not hash}
class1.p
@CLASS
class1

@create[]


@someMethod[cfg]

$className[class]
$methodName[method]

^use[${className}.p]


$obj[^process{^^${className}::create[^$cfg]}]

^obj.[$methodName][]
test.html
@USE
class1.p

@main[]
$cfg[
	$.somevar[!!!]
]

$obj[^class1::create[]]
^obj.someMethod[$cfg]
При запуске test.html получаем "not hash", хотя передем именно хэш

Если же хэш $cfg передадим не методу ^class1.someMethod[], а конструктору класса class1, что бы он сохранил этот хэш, как переменную объекта, то все работает.

Т.е. получается, что код внутри ^process{} выполняется не в контексте метода ^class1.someMethod[], а в контексте всего класса class1.

В документации сказано: "Строка будет скомпилирована и выполнена как код на Parser, в указанном контексте, или в текущем контексте."
Т.к. я не указываю контекст, ожидаю, что код будет выполнен в контексте именно этого метода.

Это я чего-то не поимаю или, все же, баг?