คุณอาจใช้อุปกรณ์เสริมที่แตกต่างกันในการสื่อสารความตั้งใจของคุณกับคนที่อ่านรหัสของคุณและทำให้ง่ายต่อการเขียนคลาสที่จะทำงานอย่างถูกต้องไม่ว่าจะเรียก API สาธารณะของพวกเขาอย่างไร
class Person
attr_accessor :age
...
end
ที่นี่ฉันเห็นว่าฉันทั้งสองสามารถอ่านและเขียนอายุได้
class Person
attr_reader :age
...
end
ที่นี่ฉันเห็นว่าฉันสามารถอ่านอายุเท่านั้น ลองนึกภาพว่ามันถูกกำหนดโดยนวกรรมิกของคลาสนี้และหลังจากนั้นก็คงที่ หากมี mutator (ผู้เขียน) สำหรับอายุและคลาสนั้นถูกเขียนขึ้นโดยสมมติว่าอายุนั้นเมื่อตั้งค่าแล้วจะไม่มีการเปลี่ยนแปลงข้อผิดพลาดอาจเกิดขึ้นจากการเรียกรหัสของ mutator นั้น
แต่เกิดอะไรขึ้นเบื้องหลัง?
ถ้าคุณเขียน:
attr_writer :age
ที่ได้รับการแปลเป็น:
def age=(value)
@age = value
end
ถ้าคุณเขียน:
attr_reader :age
ที่ได้รับการแปลเป็น:
def age
@age
end
ถ้าคุณเขียน:
attr_accessor :age
ที่ได้รับการแปลเป็น:
def age=(value)
@age = value
end
def age
@age
end
รู้ว่านี่เป็นอีกวิธีหนึ่งในการคิดเกี่ยวกับสิ่งนี้: ถ้าคุณไม่มีผู้ช่วยเหลือ attr _... และต้องเขียน accessors ด้วยตัวเองคุณจะเขียน accessors ใด ๆ เกินกว่าที่ห้องเรียนต้องการหรือไม่ ตัวอย่างเช่นหากอายุเท่านั้นที่ต้องอ่านคุณจะเขียนวิธีที่อนุญาตให้เขียนได้หรือไม่