Tôi đã dành thời gian đáng kể để gỡ lỗi một tập lệnh gần đây và cuối cùng khi tôi tìm thấy vấn đề là do mã trông như thế này:
class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}
Hóa ra vấn đề là với điều đó $!.bar
, mà cần phải có được một trong hai $!bar
hoặc $.bar
. Tôi nhận được điều này.
Nhưng tại sao điều này không chết ?
Nhìn vào này chi tiết hơn, có vẻ như vấn đề ở đây là tôi đang cố gắng để gọi một phương thức (không tồn tại) bar
trên $!
, mà vào thời điểm này là Nil
bởi vì có chưa được bất kỳ lỗi nào.
Và có vẻ như tôi thực sự có thể gọi bất kỳ phương thức nào tôi muốn Nil
và tất cả đều âm thầm trở lại Nil
, bao gồm cả những thứ như Nil.this-is-a-fake-method
và Nil.reverse-entropy(123)
.
Đây có phải là một tính năng? Nếu vậy, lý do là gì?