我试图理解perl6中的包装是如何工作的。我正在使用此代码:
第一个文件(test.pl6):
use v6;
use lib '.';
use TestClass;
my TestClass $t .= new;
$t.wrapped(1, 7);
第二个文件(TestClass.pm6):
multi sub trait_mod:<is>(Routine:D \r, :$dummy!)
{
r.wrap(sub (|)
{
say 'Dummy';
callsame;
});
}
unit class TestClass;
method wrapped($a, $b) is dummy
{
say "Wrapped ($a, $b)";
}
执行 test.pl6 时,我得到:
Cannot invoke this object (REPR: Null; VMNull)
in sub at TestClass.pm6 (TestClass) line 5
in any enter at gen/moar/Metamodel.nqp line 3999
in block <unit> at test.pl6 line 7
当上面的所有代码都在同一个文件中时,它会工作并首先打印 Dummy 然后 Wrapped(1,7)。
我做错了什么?
答案 0 :(得分:4)
根据RT问题#129096,这是一个错误:“[BUG]子包裹着mod_trait:当导出产生神秘错误消息时,在同一单元中工作正常”。在2016年8月26日的评论中,这个错误列出了一些其他错误,记者认为这些错误是相关的,因为它们代表了“编译时关闭时丢失的外部上下文”错误。
相关错误列表中有一个a comment dated 10 April 2016表示:
我真的感到惊讶的是“无法调用此对象” 门票:
粗略地对这些进行的调查表明,它们都属于更广泛的范围 “没有幸存预编译的某种类型的代码属性”的类别
我没有回顾所有明显相关的错误,或者在#perl6-dev上询问开发人员对它们的看法。