有一个unwrap
方法,但似乎我应该使用 它不是它应该使用的方式。它似乎应该是一个 独立程序或不同类中的方法。我错过了什么?为什么Perl 6的unwrap方法是一个例程方法?
它似乎并不关心它的调用者是什么,只要它作为参数得到正确的Routine::WrapHandle
thingy。在此 例子,我wrap
子程序,并得到一个WrapHandle
:
sub add-two-numbers ($n, $m) { $n + $m }
sub do-some-stuff ($n, $m, $o) {
add-two-numbers( $n max $m, $m max $o);
}
put do-some-stuff(5, 10, 15);
# now I want to look into do-some-stuff to see what it's
# passing
my $wraphandle = &add-two-numbers.wrap: {
say "Arguments were (@_[])";
callwith(|@_);
}
put do-some-stuff(5, 10, 15);
然后,我可以创造一个不同的,不相关的常规,并呼吁对unwrap
:
my &routine = sub { 1 };
&routine.unwrap($wraphandle);
put do-some-stuff(5, 10, 15);
的调用者来unwrap
似乎是多余的。事实上,我可以把它作为一个 类的方法,它仍然有效:
Routine.unwrap($wraphandle);
但是,看来这应该是某个程序(因为调用者 无所谓):
unwrap($wraphandle); # doesn't exist
或者对自认为Routine::WrapHandle
的方法是在 行为的来源:
$wraphandle.unwrap; # but, this method doesn't exist in that class
所以,我错过这个 方法?
包装文档提到[WrapHandle是私人的] (https://docs.perl6.org/type/Routine),所以我没有走这条路。它实际上返回'Routine :: WrapHandle',所以这也是需要解决的问题。 –