考虑下面的程序,我在其中创建了一个散列。然后,我想更改其中的两个值:
my $hash = %(
wallet => 100,
gave => 0,
received => 0,
);
for ^1 { $hash<wallet gave> Z+= <-1 1> };
dd $hash;像这样,for的最后一行没有做任何事情,也没有任何警告。散列是不变的:
Hash $hash = ${:gave(0), :received(0), :wallet(100)}添加另一条语句会更改行为:
my $hash = %(
wallet => 100,
gave => 0,
received => 0,
);
for ^1 { $hash<wallet gave> Z+= <-1 1>; True };
dd $hash;现在,inplace edit完成了它的工作,但有一个警告(尽管当我发现它的用处时,我认为它是“无用的”):
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;同样正确的输出:
Hash $hash = ${:gave(1), :received(0), :wallet(99)}发布于 2018-02-27 02:23:48
这是个bug。自Rakudo 2018.02.1-45-g8a10fc1修复
https://stackoverflow.com/questions/45001820
复制相似问题