ฉันใช้เวลามากในการดีบักสคริปต์เมื่อเร็ว ๆ นี้และเมื่อฉันพบปัญหาในที่สุดมันเป็นเพราะโค้ดที่มีลักษณะดังนี้:
class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}
มันกลับกลายเป็นปัญหาอยู่กับที่$!.bar
ซึ่งควรจะได้รับอย่างใดอย่างหนึ่งหรือ$!bar
$.bar
ฉันได้รับสิ่งนี้
แต่ทำไมไม่ตาย ?
กำลังมองหาที่นี้ในรายละเอียดมากขึ้นก็ดูเหมือนว่าปัญหาที่นี่เป็นที่ที่ฉันพยายามที่จะเรียก (ที่ไม่มีอยู่จริง) วิธีการbar
ใน$!
ซึ่งในจุดนี้เป็นNil
เพราะมียังไม่ได้รับข้อผิดพลาดใด ๆ
และดูเหมือนว่าที่จริงผมสามารถเรียกวิธีการใด ๆ ที่ฉันต้องการบนNil
และพวกเขาทั้งหมดกลับมาเงียบ ๆNil
รวมทั้งสิ่งที่ชอบและNil.this-is-a-fake-method
Nil.reverse-entropy(123)
นี่เป็นคุณสมบัติหรือไม่? ถ้าเป็นเช่นนั้นมีเหตุผลอะไร?