Hay un problema con los dos métodos aquí ... Si una variable de instancia se establece en un caso, su acceso estará disponible para todas las instancias, porque está definiendo métodos en self.class
en lugar de uno mismo.
dude = Mine.new
dude.my_number 1
puts dude.my_1
dudette = Mine.new
dudette.my_1 = 2 # works, but probably shouldn't
dudette.my_number 2
dude.my_2 = 3 # works, but probably shouldn't
Lo que es probable que desee hacer es modificar sólo la instancia que tiene la variable de instancia:
class Mine
# ...
def my_number num
class << self
attr_accessor "my_#{num}"
end
self.send("my_#{num}=", num)
end
end
De esta manera, las variables de instancia única obtener descriptores de acceso de los objetos que fueron creados. Tampoco me molesté con instance_variable_set, porque si está configurando un acceso, entonces creo que se lee mejor para reutilizarlo. Pero eso es una llamada de estilo. El gran problema aquí es llamar al class << self
en lugar de self.class
.
¿Hay alguna razón para usar 'singleton_class'? También siendo una línea, la sintaxis 'class_eval {attr_accessor:" my _ # {num} "}' sería más limpia :) –
@ HalilÖzgür quiere definir ese método solo para esa instancia, entonces es por eso que usa 'singleton_class', si usa 'self.class', entonces todas las instancias obtienen el método y usted no quiere eso. tiene razón con la sintaxis, haré el cambio – Orlando
btw singleton_class es lo mismo que hacer 'clase << self' – Orlando