Perl 6 のメソッドと関数の呼び出しでコロンが何をしなければならないのか疑問に思っています。記録として、MoarVM バージョン 2015.05 上に構築された perl6 バージョン 2015.05-55-gd84bbbc を使用しています。
Perl6 仕様テスト (S32-io)で次のことを確認しました (コメントを追加しました)。
$fh.print: "0123456789A"; # prints '0123456789A' to the file
私が知る限り、これは次と同等です。
$fh.print("0123456789A"); # prints '0123456789A' to the file
これらは両方とも複数の引数を取り、リストをうまくフラット化するようです:
$fh.print: "012", "345", "6789A"; # prints '0123456789A' to the file
$fh.print("012", "345", "6789A"); # prints '0123456789A' to the file
my @a = <012 345 6789A>;
$fh.print(@a); # prints '0123456789A' to the file
$fh.print: @a; # prints '0123456789A' to the file
これら 2 つの異なる構文を使用するには、何らかの理由があるはずです。いずれかの構文を使用する理由はありますか?
:
また、メソッドとして使用する場合は、または()
printを使用する必要があることにも気付きました。
$fh.print(@a); # Works
$fh.print: @a; # Works!
$fh.print @a; # ERROR!
関数でコロンを使用すると、いくつかの興味深い動作もありますprint
。この場合、:
と()
は同等ではありません。
print @a; # Prints '0123456789A' (no newline, just like Perl 5)
print(@a); # Ditto
print: @a; # Prints '012 345 6789A' followed by a newline (at least in REPL)
print @a, @a; # Error (Two terms in a row)
print: @a, @a; # Prints '012 345 6789A 012 345 6789A' followed by a newline (in REPL)
次に、スクリプト ファイルで print を使用してみました。これは、標準出力への出力で機能します。
print @a;
ただし、これは標準出力に出力されません。
print: @a, @a;
ただし、メソッド バージョンは正常に動作します。
$fh.print: @a, @a; # Prints '0123456789A0123456789A' to the file
なんとなくわかった気がするのですが、言葉にできません。誰かが印刷物を使用してこれらの種類を説明してもらえますか. また、これらの動作は Great List Refactor によって変更されますか?