时间扭曲变量初始化?

在以下简单的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章