jjm*_*elo 5 compilation exception perl6
我正在尝试解决此问题,该问题提到此页面中的X::TypeCheck::Splice异常描述是错误的.这是代码:
use experimental :macros;
CATCH {
# will definitely catch all the exception
default { say .^name, " ? ", .Str; }
}
macro a { 'foo' };
say a;
Run Code Online (Sandbox Code Playgroud)
我已经扩展到包括CATCH块.但是,会抛出异常:
===SORRY!===
Too few positionals passed; expected 3 arguments but got 2
Run Code Online (Sandbox Code Playgroud)
但是,我不知道它是否是正确的类型,因为它没有被CATCH块捕获.我也尝试将该块插入CHECK或BEGIN在编译时发生的阶段,但无济于事.任何的想法?
显然,像clojure这样的其他语言让宏处理它自己的异常.这似乎不适用于此; 在宏定义中插入CATCH块会抛出一个WARNING,并且有一些工作(会打印Nil),这可能意味着它正在捕获异常,但仍然不会打印异常类型.
通过EVAL运行代码将在eval sub的运行时抛出编译时警告
EVAL q/use experimental :macros; macro a { "foo" }; say a/;
CATCH { default { .perl.say } };
# X::AdHoc.new(payload => "Too few positionals passed; expected 3 arguments but got 2")
Run Code Online (Sandbox Code Playgroud)
如您所见,至少在这个版本中它是一个"无类型"的例外.这些也可以来自VM内部,其中更细致的错误处理并不像Perl 6或NQP代码那样容易.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |