次の単純な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(ゼロ)になります。
誰かがこの行動の正確なメカニズムを説明できますか?