Я пытаюсь решить эту проблему , в которой упоминается, что описание X::TypeCheck::Splice
исключение в этой странице неверно . Это код:
use experimental :macros;
CATCH {
# will definitely catch all the exception
default { say .^name, " → ", .Str; }
}
macro a { 'foo' };
say a;
Который я расширил, включив в него блок CATCH
. Однако возникает исключение:
===SORRY!===
Too few positionals passed; expected 3 arguments but got 2
Однако я не знаю, правильный ли это тип, поскольку он не перехватывается блоком CATCH. Я также пытался вставить этот блок в фазеры CHECK
или BEGIN
, которые появляются во время компиляции, но безрезультатно. Есть идеи?
Очевидно, что другие языки, такие как clojure, позволяют макросу обрабатывать свое собственное исключение . Это, кажется, не работает здесь; вставка блока CATCH внутри определения макроса выдает ПРЕДУПРЕЖДЕНИЕ и вид работ (будет выводить Nil
), что, вероятно, означает, что он перехватывает исключение, но все еще не печатает тип исключения.