parser

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

 

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

Ответ

moko 17.02.2021 01:05

Что есть зависимость результата от вызова, как не тип?
Так просто разный результат может(уже мог) получиться.
@main[]
$n(1)
$s[^test[]] "$s"
$v(^test[]) "$v"

@test[]
magic ^n.int[] magic
Выдаст:
"magic 1 magic"
"1"

Приведение типа тоже есть, вот здесь все возможные варианты перечислены:
@GET[тип обращения] [3.4.0]
код, обрабатывающий обращения к объекту/классу в определённых контекстах вызова
тип обращения ... может принимать одно из следующих значений: def, expression, bool, double, hash, table или file.
От такого ожидаешь, скорее, исключения
Тут достаточно тонкая грань с $h[ ^hash::create[] ]. По мне так да, логичнее было бы разрешать только пробельные символы. Но это лишние проверки по ходу исполнения (причем не самые быстрые), поэтому видимо изначально было решено не выдавать исключения.
то логичным кажется отбрасывать всё, что не $result, если он явно определён.
Если
@test[]
^first[]
^first[]
Выдает исключение, то логично, что
@test[]
^first[]
^first[]
$result(true)
Тоже выдает исключение, поскольку парсер заранее не знает, что будет следующим оператором.
приходится складывать результаты работы в tmp-переменные
Боюсь от этого можно избавиться только если придумаем способ явно декларировать использование $result в методе. Можно конечно анализировать код, но тогда всякая экзотика типа $caller.result или ниже может сломаться...
@main[]
$s[result]
0? $$s[1?]