Re su actualización
Aunque se puede implementar una clase que actúa como usted describe, se es bastante inusual, y probablemente confundirá a cualquiera que use la clase.
Normalmente los accessors tienen setters y getters. Cuando configura algo usando el setter, obtiene lo mismo del getter. En el siguiente ejemplo, obtienes algo totalmente diferente del comprador. En lugar de utilizar un colocador, probablemente debería usar un método 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
El método add se vería así:
def add(value)
@data.push(value)
end
...
object.add "cat"
object.add "dog"
pp object.array
attr_accessor funciona para cualquier objeto. ¿Lo has probado? ¿Qué salió mal? – Douglas
@Douglas: Mire la actualización –
Si define un método 'foo =' para que después de hacer 'x.foo = bar',' x.foo' no devuelva 'bar', pueda confundir al diablo con cualquiera quien usa tu clase ¿Por qué no simplemente hacer 'object.array <<" cat "'? – sepp2k