jak*_*kar 8 variables initialization raku
在下面的简单 for 循环中,我们通过增加一个无类型变量($n)来创建一个数组(@a):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
Run Code Online (Sandbox Code Playgroud)
结果是“有点”预期:
[(Any 0) (Int 1) (Int 2)]
Run Code Online (Sandbox Code Playgroud)
我说“有点”是因为我期望 $n 的第一个值是“未定义”值(Any)。
就像,在产生第一个值 (Any) 之后,随着我们增加 $n(在 $n 的第一个增量之后,我们有一个转换为 Int),赋值中还有一些时间扭曲事件,我们也得到要更改的第一个值。所以我们最终将第一个值设为 0(零)。
有人可以解释这种行为的确切机制吗?
见Any.pm6#L519,候选人
multi sub postfix:<++>(Mu:U $a is rw) { $a = 1; 0 }
Run Code Online (Sandbox Code Playgroud)
用来。还有一些未定义值的其他候选者,您可以尝试
my Bool $x;
dd $x++; #Bool::False
my Num $y;
dd $y++; #0e0
Run Code Online (Sandbox Code Playgroud)