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