Re ваше обновление:
Хотя вы можете реализовать класс, который действует так, как вы его описали, он довольно необычен и, вероятно, запутает любого, кто использует класс.
Обычно методы доступа имеют сеттеры и геттеры. Когда вы устанавливаете что-то с помощью установщика, вы получаете то же самое обратно от получателя. В приведенном ниже примере вы получаете что-то совершенно другое от получателя. Вместо того, чтобы использовать сеттер, вы, вероятно, должны использовать метод 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
Метод добавления будет выглядеть так:
def add(value)
@data.push(value)
end
...
object.add "cat"
object.add "dog"
pp object.array