Re cập nhật của bạn:
Mặc dù bạn có thể thực hiện một lớp đóng vai trò như bạn mô tả, nó là khá bất thường, và có thể sẽ gây nhầm lẫn cho bất cứ ai sử dụng lớp học.
Người truy cập thông thường có người định cư và getters. Khi bạn thiết lập một cái gì đó bằng cách sử dụng setter, bạn nhận được cùng một điều trở lại từ getter. Trong ví dụ dưới đây, bạn sẽ có được một thứ hoàn toàn khác biệt với getter. Thay vì sử dụng setter, bạn có thể sử dụng phương thức add
.
class StrangePropertyAccessorClass
def initialize
@data = []
end
def array=(value) # this is bad, use the add method below instead
@data.push(value)
end
def array
@data
end
end
object = StrangePropertyAccessorClass.new
object.array = "cat"
object.array = "dog"
pp object.array
Các phương thức add sẽ trông như thế này:
def add(value)
@data.push(value)
end
...
object.add "cat"
object.add "dog"
pp object.array
attr_accessor hoạt động cho bất kỳ đối tượng nào. Bạn đã thử chưa? Có chuyện gì? – Douglas
@Douglas: Nhìn vào bản cập nhật –
Nếu bạn định nghĩa một phương thức 'foo =' để sau khi thực hiện 'x.foo = bar',' x.foo' không trả về 'bar', bạn sẽ nhầm lẫn với bất kỳ ai người sử dụng lớp học của bạn. Tại sao không chỉ làm 'object.array <<" cat "'? – sepp2k