แม้จะอ่าน "การทำความเข้าใจสัญลักษณ์ทับทิม " แต่ฉันก็ยังสับสนกับการแสดงข้อมูลในหน่วยความจำเมื่อต้องใช้สัญลักษณ์ หากสัญลักษณ์สองสัญลักษณ์ที่อยู่ในวัตถุต่างกันมีอยู่ในตำแหน่งหน่วยความจำเดียวกันแล้วสัญลักษณ์นั้นมีค่าต่างกันอย่างไร? ฉันคาดว่าตำแหน่งหน่วยความจำเดียวกันจะมีค่าเดียวกัน
นี่เป็นคำพูดจากลิงค์:
ซึ่งแตกต่างจากสตริงสัญลักษณ์ที่มีชื่อเดียวกันจะเริ่มต้นและมีอยู่ในหน่วยความจำเพียงครั้งเดียวในระหว่างเซสชันของทับทิม
ฉันไม่เข้าใจวิธีจัดการเพื่อแยกความแตกต่างของค่าที่อยู่ในตำแหน่งหน่วยความจำเดียวกัน
ลองพิจารณาตัวอย่างนี้:
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
patient1
และpatient2
เป็นแฮชทั้งคู่ก็ใช้ได้ :ruby
อย่างไรก็ตามเป็นสัญลักษณ์ หากเราจะแสดงผลลัพธ์ต่อไปนี้:
patient1.each_key {|key| puts key.to_s}
แล้วจะเอาท์พุทอะไร? "red"
, หรือ"programming"
?
เมื่อลืมแฮชไปสักวินาทีฉันคิดว่าสัญลักษณ์เป็นตัวชี้ค่า คำถามที่ฉันมีคือ:
- ฉันสามารถกำหนดค่าให้กับสัญลักษณ์ได้หรือไม่?
- สัญลักษณ์เป็นเพียงตัวชี้ไปยังตัวแปรที่มีค่าอยู่หรือไม่?
- หากสัญลักษณ์เป็นสากลหมายความว่าสัญลักษณ์ชี้ไปที่สิ่งหนึ่งเสมอหรือไม่?
puts patient1[:ruby]
มันจะพิมพ์ "สีแดง" ถ้าคุณบอกว่าputs patient2[:ruby]
มันจะพิมพ์