Trong vòng lặp đơn giản sau đây, chúng ta tạo một mảng (@a) bằng cách tăng một biến không chữ ($ n):
my @a = do for 1..3 {
state $n;
$n.^name, $n++;
}
say @a;
Kết quả là "loại" dự kiến:
[(Any 0) (Int 1) (Int 2)]
Và tôi nói "loại" bởi vì tôi đã dự đoán là giá trị đầu tiên của $ n giá trị "không xác định" (Bất kỳ).
Giống như, sau khi giá trị đầu tiên được tạo ra (Bất kỳ) và khi chúng ta tăng $ n (sau lần tăng đầu tiên của $ n, chúng ta sẽ truyền vào một Int), cũng có một sự kiện cong vênh thời gian trong bài tập và chúng ta cũng nhận được giá trị đầu tiên thay đổi. Vì vậy, chúng tôi cuối cùng có giá trị đầu tiên là 0 (không).
Ai đó có thể giải thích cơ chế chính xác của hành vi này?