时间扭曲变量初始化?
Time Warping Variable Initialization?
在下面的简单 for 循环中,我们通过递增无类型变量 ($n) 创建了一个数组 (@a):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
预期的结果是"kind of":
[(Any 0) (Int 1) (Int 2)]
我说 "kind of" 因为我期望 "undefined" 值(任意)作为 $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
在下面的简单 for 循环中,我们通过递增无类型变量 ($n) 创建了一个数组 (@a):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
预期的结果是"kind of":
[(Any 0) (Int 1) (Int 2)]
我说 "kind of" 因为我期望 "undefined" 值(任意)作为 $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