ฉันคิดว่ามันแปลกมากที่ทับทิมนี้เป็นไปได้ (ฉันจะไม่พูดในทันที):
obj = #code redacted
print obj.state # Some value.
LValue = obj
print obj.state # Different value!
ความท้าทายของคุณคือการสร้างรหัสคร่าวๆของแบบฟอร์มนี้ สร้างวัตถุและกำหนดให้กับตัวแปร มันควรจะมีคุณสมบัติที่กำหนดไว้ (หรือวิธีการที่กำหนดขึ้น, idempotent) เหมือนstate
ด้านบน, การเปลี่ยนแปลงหลังจากที่วัตถุถูกกำหนดให้กับตัวระบุใหม่ ( LValue
ด้านบน), แม้ว่าคุณจะยังคงใช้ตัวระบุเก่า ( obj
ด้านบน) เพื่ออ้างอิง
แก้ไขเพื่อเน้น : state
หรือสิ่งที่เทียบเท่าจะต้องเป็น idempotent ดังนั้นการสร้าง accessor ที่ปรับเปลี่ยนค่าหรือด้วยเหตุผลอื่นใดให้ผลลัพธ์ที่แตกต่างกันเมื่อเรียกหลาย ๆ ครั้งในแถวไม่ใช่โซลูชันที่ถูกต้อง หรือยิ่งกว่านั้นจะต้องมีการกำหนดที่เปลี่ยนแปลงสถานะ
ภาษาใด ๆ ที่ได้รับมอบหมายมีสิทธิ์แม้ว่าอาจมีบางภาษาที่ไม่มีวิธีการแก้ปัญหาที่ถูกกฎหมายอย่างสมบูรณ์ ฉันจะโพสต์คำตอบ Ruby ของฉันหากไม่มีใครได้รับหลังจากผ่านไปสองสามวันและยอมรับคำตอบที่ได้รับคะแนนสูงสุด
(setq a (list "val")) (setq b (nconc a "val2"))
ตัวอย่างเช่น a
สิ้นสุดการประเมิน("val" . "val2")
ณ จุดนั้น
LValue = obj
บรรทัดstate
หรือไม่ (ฉันเพียงแค่จะทำให้ทรัพย์สินใน C # ที่เพิ่มขึ้นทุกครั้งที่คุณได้รับมัน)