¿Hay una manera simple de enumerar los accesores/lectores que se han establecido en una clase de Ruby?Inicializar una clase de Ruby desde un hash arbitrario, pero solo las claves con accesadores coincidentes
class Test
attr_reader :one, :two
def initialize
# Do something
end
def three
end
end
Test.new
=> [one,two]
Lo que realmente estoy tratando de hacer es permitir inicializar a aceptar un hash con cualquier número de atributos en, pero sólo se comprometan los que tienen los lectores ya definidos. Algo como:
def initialize(opts)
opts.delete_if{|opt,val| not the_list_of_readers.include?(opt)}.each do |opt,val|
eval("@#{opt} = \"#{val}\"")
end
end
¿Alguna otra sugerencia?
Actualizada para usar Array # concat en lugar de Array # << para hacer arreglos planos. – tadman
¡Gran idea! Mantendré este en una biblioteca en alguna parte, ¡estoy seguro de que será muy útil! –