有一個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',所以這也是需要解決的問題。 –