2017-07-09 6 views
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)} 
+3

これはバグのようです。おそらくシンクコンテキスト処理のバグです。^1 {シンク$ハッシュ Z + = <-1 1>};または^ 1($ハッシュと言うと$ hash Z + = <-1 1>};両方が正しい結果を返します。 – raiph

+0

私はそこにシンクを投げてみましたが、それがうまくいくのを見ました。奇妙な –

+0

FWIW、Rakudo Perl 6のどのバージョンを使用していますか?私は非常に最近修正された 'for'ループの最終的な値を沈めないというバグを思い出しています。 –

答えて

1

です。 Rakudoとして修正されました2018.02.1-45-g8a10fc1

関連する問題