2017-07-09 71 views
8

Karma oluşturduğum bu programı düşünün. Bunun gibiBu içerik, bu Perl 6 zip operatörünü karıştırıyor?

my $hash = %(
    wallet => 100, 
    gave  => 0, 
    received => 0, 
    ); 

for ^1 { $hash<wallet gave> Z+= <-1 1> }; 

dd $hash; 

, for son satır bir şey yapmaz ve hiçbir uyarı vardır: O zaman içinde iki değerlerini değiştirmek istiyorum. karma değişmez: inplace düzenleme şeyi yapar, ama ben buldum ben "yararsız" itiraz rağmen bir uyarı (var Şimdi

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)} 

başka bir ifade eklenmesi davranışını değiştirir bunun için bir kullanım): Ben de aynı şey olmalı Z+= olmadan yaparsanız

Useless use of constant value True in sink context 
Hash $hash = ${:gave(1), :received(0), :wallet(99)} 

, çalışır:

my $hash = %(
    wallet => 100, 
    gave  => 0, 
    received => 0, 
    ); 

for ^1 { $hash<wallet gave> = $hash<wallet gave> Z+ <-1 1> } 

dd $hash; 

Yine sağ çıkışı:

Hash $hash = ${:gave(1), :received(0), :wallet(99)} 
+3

'dan itibaren bu bir hataya benziyor. Muhtemelen bir battaniye içeriği ele alma hatası.^1 için {sink $ hash Z + = <-1 1>}; 'veya'^için {demek $ hash Z + = <-1 1>}; 'her ikisi de doğru sonuçları verir. – raiph

+0

Oraya lavaboya atmayı denedim ve işe yaradığını gördüm. Garip. –

+0

FWIW, Rakudo Perl 6'nın hangi versiyonunu kullanıyorsunuz? Oldukça yakın zamanda sabitlenmekte olan bir 'for' döngüsündeki son değeri batırma konusunda bir hata hatırlıyorum. –

cevap

1

Bu bir bug bu. Rakudo 2018.02.1-45-g8a10fc1