13

Perl 5 と Perl 6の相違点の要約では、wantarray関数がなくなっていることに注意してください。

wantarray() はなくなりました

wantarray はなくなりました。Perl 6 では、コンテキストは外向きに流れます。つまり、ルーチンは自分がどのコンテキストにいるかを認識していません。

代わりに、すべてのコンテキストで正しいことを行うオブジェクトを返す必要があります。

誰かがそのようなオブジェクトがどのように作成されるかの例を提供できますか?

4

2 に答える 2

4

私は2つの例が次のようになると思います:


http://perlcabal.org/syn/S13.html#Type_Casting

クラスは、ルーチン、配列、またはハッシュであるかのように応答できるようにするメソッドを定義できます。長い形式は次のとおりです。

method postcircumfix:<( )> ($capture) {...}
method postcircumfix:<[ ]> (**@slice) {...}
method postcircumfix:<{ }> (**@slice) {...}

これらは少し扱いに​​くいので、次の短い形式を使用することもできます。

method &.( $capture ) {...}
method @.[ **@slice ] {...}
method %.{ **@slice } {...}

また、これはそれほど重要ではないかもしれませんが、関連があると思います:http: //perlcabal.org/syn/S12.html

検索する:

自動生成されたアクセサーの一部またはすべてをオーバーライドする独自のアクセサーを作成できます。

したがって、いくつかのコンテキスト固有のアクセサーを持つオブジェクトを返します。


興味深いことに、Perl6が「wantarray」を一般的な「want」に置き換えることから始まりました。RFC98 (v1)コンテキストベースのメソッドのオーバーロード、2000年頃、これもhttp://dev.perl.org/perl6/rfc/21にあります。 .html。変更が行われた理由/時期がわかりません。

于 2010-10-18T20:59:38.623 に答える
3

ブログ投稿ImmutableSigilsand Contextに関するRedditに関するこのコメントは、次の例を示しています。

class GeoLocation is Array {
    method Str { 'middle of nowhere' }
}

sub remote_location {
    return GeoLocation.new(1e6 xx 3);
}

# or even easier:

sub remote_location {
    return (1e6 xx 3) but 'middle of nowhere';
}
于 2010-10-19T11:33:04.787 に答える