parser

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

 

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

есть предположение, что вопрос касался не того...

Misha v.3 17.08.2005 13:20

...почему параметры передаем в виде хеша, а того, зачем в методе мы делаем это:
@first[params][_params]
$_params[^hash::create[$params]]
ведь в принципе можно не делать этого и внутри метода получать доступ к полям хеша: $params.type

однако если мы захотим из этого метода вызвать другой метод, и решим отдать ему все пришедшие параметры:
@first[params]
...
^second[$params]
то в случае, если метод @first[] мы вызывали без параметров (^first[]) а в методе @second[] решили проверить например:
@second[params]
^if(def $params.type){сделать что-то}
то мы отгребем ошибку, говорящую о том, что у строки нет метода type. это происходит из-за особенности парсера: пустая переменная превращается в строку (если переменную не передавать, как в вызове ^first[] то в $params будет void, и ошибки не будет). чтобы этого не происходило и приходится принудительно создавать хеш из того, что пришло.

в выходящей скоро версии парсера такое поведени будет поправлено.

а пока приходится делать именно так (но не обязательно делать это в каждом методе), хотя возможно еще такой обход: ^if($params is "hash" && def $params.type){сделать что-то}, но он мне не нравится.