Bạn có thể sử dụng các trình truy cập khác nhau để truyền đạt ý định của mình tới ai đó đang đọc mã của bạn và giúp việc viết các lớp sẽ hoạt động chính xác dễ dàng hơn bất kể API công khai của họ được gọi như thế nào.
class Person
attr_accessor :age
...
end
Ở đây, tôi có thể thấy rằng tôi có thể vừa đọc vừa viết tuổi.
class Person
attr_reader :age
...
end
Ở đây, tôi có thể thấy rằng tôi chỉ có thể đọc tuổi. Hãy tưởng tượng rằng nó được thiết lập bởi hàm tạo của lớp này và sau đó không đổi. Nếu có một trình biến đổi (nhà văn) theo tuổi và lớp được viết giả sử rằng tuổi đó, một khi được đặt, không thay đổi, thì một lỗi có thể xảy ra do mã gọi trình biến đổi đó.
Nhưng những gì đang xảy ra đằng sau hậu trường?
Nếu bạn viết:
attr_writer :age
Điều đó được dịch thành:
def age=(value)
@age = value
end
Nếu bạn viết:
attr_reader :age
Điều đó được dịch thành:
def age
@age
end
Nếu bạn viết:
attr_accessor :age
Điều đó được dịch thành:
def age=(value)
@age = value
end
def age
@age
end
Biết rằng, đây là một cách khác để suy nghĩ về nó: Nếu bạn không có người trợ giúp _... và phải tự viết những người truy cập, bạn có viết thêm bất kỳ người truy cập nào hơn lớp bạn cần không? Ví dụ, nếu tuổi chỉ cần đọc, bạn cũng sẽ viết một phương thức cho phép nó được viết chứ?