2012-05-18 18 views
7

Así que sé que puedes obtener todas las variables de instancia en Ruby llamando al #instance_variables, pero si aún no se han configurado, entonces no se muestran.Obtiene las variables attr_accessor/instance en ruby ​​

Ejemplo

class Walrus 
    attr_accessor :flippers, :tusks 
end 

w = Walrus.new 
w.instance_variables # => [] 
w.tusks    # => nil 
w.instance_variables # => [:@tusks] 

Quiero acceder a todas las variables de instancia definidas por attr_accessor inmediatamente.

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
+0

posible duplicado de [Cómo llegar atributos que se definieron a través atr \ _reader o atr \ _accessor] (http://stackoverflow.com/questions/10006889/how-to-get-attributes-that-were -defined-through-attr-reader-or-attr-accessor) –

Respuesta

15

Bueno, todavía no existen. Las variables de instancia surgen a la existencia en la primera asignación. Si los quiere en una instancia completamente nueva, tóquelos en el constructor.

class Walrus 
    attr_accessor :flippers, :tusks 

    def initialize 
    self.flippers = self.tusks = nil 
    end 
end 

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
5

Bueno, attr_accessor crea un par de métodos, un regulador y un captador. No estoy seguro de si hay una manera integrada para obtener una lista, pero se puede mirar a través de los métodos de instancia para los pares generados:

Walrus.instance_methods.find_all do |method| 
    method != :== && 
    method != :! && 
    Walrus.instance_methods.include?(:"#{method}=") 
end 
0

¿Cómo sobre el uso de métodos menos los métodos de objeto o clase? la matriz de retorno contendrá los atributos/métodos definidos y las variables de instancia definidas en getter/accessor.

your_instance_name.methods - Object.methods 
your_instance_name.methods - Class.methods 
Cuestiones relacionadas