在以下简单的for循环中,我们通过增加无类型变量($ n)来创建数组(@a):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
结果是预期的“种类”:
[(Any 0) (Int 1) (Int 2)]
我之所以说“种类”,是因为我期望将“未定义”值(任何)作为$ n的第一个值。
就像在产生第一个值(Any)之后,随着我们增加$ n(在第一次增加$ n之后,我们将其强制转换为Int),赋值中还存在一些时间扭曲事件,我们也得到第一个要更改的值。因此,我们最终将第一个值设为0(零)。
有人可以解释这种行为的确切机制吗?
参见候选人Any.pm6#L519
multi sub postfix:<++>(Mu:U $a is rw) { $a = 1; 0 }
用来。还有一些其他未定义值的候选者,您可以尝试
my Bool $x;
dd $x++; #Bool::False
my Num $y;
dd $y++; #0e0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句