parser

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

 

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

о [] и {} скобках и типах параметров

Александр Петросян (PAF) 31.10.2002 10:12 / 31.10.2002 10:17

обращал внимание, но видимо без успеха:
http://parser.ru/forum/?id=8795

Ром,
смотри:

есть [] скобки и есть {} скобки.

первые вычисляются ДО вызова, потом в метод передаётся вычисленное, вторые ВНУТРИ вызова, при обращении к параметру, с каждым обращением. если не будут обращаться к параметру ни разу, ни разу не вычислятся.

такой вызов ifdef:
^ifdef[что-то][действия]
будет ДО вызова выполнять действия, что совершенно не то, что ты хочешь.

такой вызов ifdef:
^ifdef[что-то]{действия}
будет выполнять действия ВНУТРИ вызова ЕСЛИ нужно.

системный if, понятно, грамотный, и такого вызова просто не позволяет:
^if(1)[yyy]
заявляя, что второй параметр должен быть кодом.

пользовательский ifdef тоже может быть грамотным, и подстраховать от неправильных вызовов, но я не стал загромождать этим свой пример.
если делать, как это сделано в системном if, надо:
@ifdef[condition;yes;no]
^if(!($yes is junction && !def $no || $no is junction)){
 ^throw[user;argument must be code]
}
тогда он также не будет позволять
^ifdef[xxx][yyy]
конструкции, как их не позволяет системный ^if.

понятно, что сам язык не знает, что делает конкретный метод, и не может догадываться о необходимом типе параметров, если ему не подсказать.

тут можно было бы пойти по пути многих других языков, и ввести что-то типа
@ifdef[value condition;code yes;code no]
но это не в духе parser. а, как было показано, если нужно проверить тип параметра, принципиальная возможность имеется.