8
ハッシュを作成するこのプログラムを考えてみましょう。このようこのPerl 6のzip演算子は、どのコンテキストで混乱しますか?
my $hash = %(
wallet => 100,
gave => 0,
received => 0,
);
for ^1 { $hash<wallet gave> Z+= <-1 1> };
dd $hash;
は、for
の最後の行には何もしていないと警告されていない:私はそれに2つの値を変更したいです。ハッシュは変更されません:インプレース編集はそのことをしますが、私が見つけたとき、私は「役に立たない」論争が、警告が(あります今
my $hash = %(
wallet => 100,
gave => 0,
received => 0,
);
for ^1 { $hash<wallet gave> Z+= <-1 1>; True };
dd $hash;
:
Hash $hash = ${:gave(0), :received(0), :wallet(100)}
は、別のステートメントを追加すると、動作が変更しますそれのための使用):
Useless use of constant value True in sink context
Hash $hash = ${:gave(1), :received(0), :wallet(99)}
私は同じことをする必要がありますZ+=
、なしで行う場合は、それが動作:
my $hash = %(
wallet => 100,
gave => 0,
received => 0,
);
for ^1 { $hash<wallet gave> = $hash<wallet gave> Z+ <-1 1> }
dd $hash;
は再び右出力:それはbug
Hash $hash = ${:gave(1), :received(0), :wallet(99)}
これはバグのようです。おそらくシンクコンテキスト処理のバグです。^1 {シンク$ハッシュ Z + = <-1 1>};または^ 1($ハッシュと言うと$ hash Z + = <-1 1>};両方が正しい結果を返します。 –
raiph
私はそこにシンクを投げてみましたが、それがうまくいくのを見ました。奇妙な –
FWIW、Rakudo Perl 6のどのバージョンを使用していますか?私は非常に最近修正された 'for'ループの最終的な値を沈めないというバグを思い出しています。 –