exception - 在 Perl 6 中,如何打印可能在编译时抛出的异常类型?

标签 exception compilation raku

我正在尝试 solve this issue ,其中提到了 X::TypeCheck::Splice 的描述this page is wrong 中的异常.这是代码:

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 块捕获。我也尝试将该块插入 CHECKBEGIN编译时出现的移相器无济于事。任何的想法?

显然,其他语言如 clojure let the macro handle its own exception .这在这里似乎行不通;在宏定义中插入 CATCH 块会引发警告和某种工作(将打印 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")

如您所见,至少在这个版本中,它是一个“无类型”异常。那些也可能来自 VM 内部,其中更细微的错误处理不像在 Perl 6 或 NQP 代码中那样容易。

关于exception - 在 Perl 6 中,如何打印可能在编译时抛出的异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50075490/

相关文章:

c++ - std::exception 使用来自本地对象的消息

compilation - 在 SBCL 中创建数组

macos - 在 mac os x snow leopard 上编译时出现 postgis 错误

set - Perl 6 中的元素成员资格如何工作?

c# - 抛出 Win32Exception

java - IDE 中的异常处理与 exe 或 jar 运行时的异常处理是否不同?

c++ - vector 异常处理程序和 Microsoft C 运行时错误处理

compilation - 工具是否可用于 'assemble' WebAssembly 到 x86-64 native 代码?

raku - Perl 6 one-liner 打印文件的唯一行

sockets - Perl 6 udp套接字: how to read response from server?