En primer lugar, lo que pasa con ruby es que permite una sintaxis diferente que es ampliamente utilizada por los codificadores ruby. Los identificadores en mayúscula son Clases o Constantes (gracias a sepp2k por su comentario), pero intenta convertirlo en un objeto. Y casi nadie usa {}
marca un bloque multilínea.
a = Object.new
if (something happens)
# do something
end
no estoy seguro de cuál es tu pregunta, pero tengo una idea, y esto sería la solución:
Si sabe qué atributos que clase puede tener, y está limitado se debe utilizar
class YourClass
attr_accessor :age
end
attr_accessor :age
es la abreviatura de:
def age
@age
end
def age=(new_age)
@age = new_age
end
Ahora se puede hacer algo lik e esto:
a = YourClass.new
if (some condition)
a.age = new_value
end
Si desea hacerlo completamente dinámico que puede hacer algo como esto:
a = Object.new
if (some condition)
a.class.module_eval { attr_accessor :age}
a.age = new_age_value
end
usando capitales para la clase no está rubí "sintaxis", pero convención común. Ya te dije que aún no soy un tipo rubio. Por cierto, tu solución funciona lo suficientemente bien para mí. Gracias. –
Sé que esta es una convención común, es por eso que escribí "Identificadores en mayúscula ** deben ** ser Clases" y vi que eres nuevo en rubí, así que pensé, te muestro cómo la mayoría de los codificadores de rubí lo harían. Y la sintaxis fue sobre la parátesis del bloque if – jigfox
@Nikhil: en realidad es * sintaxis, no una cuestión de convención.Cualquier identificador que comience con una letra mayúscula es una constante en ruby. Entonces 'a = Object.new' y' A = Object.new' también hacen cosas muy diferentes (la primera define una variable local, la otra una constante global). – sepp2k