unwrap
メソッドがありますが、それは私が使用するはずの方法です それは使用されるべき方法ではありません。これは、 スタンドアロンルーチンか、別のクラスのメソッドのいずれかである必要があります。私は何が欠けていますか?なぜPerl 6のunwrapメソッドがルーチンのメソッドですか?
が引数として正しいRoutine::WrapHandle
のthingyを取得する限り、その呼び出し元が何であるかは気にしないようです。この 例では、I 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'を返すので、修正する必要があります。 –