que estaba bajo la impresión de que las definiciones de clase en Ruby pueden ser reabiertas:Las variables locales en las definiciones de clase/ámbito
class C
def x
puts 'x'
end
end
class C
def y
puts 'y'
end
end
Esto funciona como se esperaba y se añade a la definición y
clase original.
estoy confundido en cuanto a por qué el código siguiente no funciona como se esperaba:
class D
x = 12
end
class D
puts x
end
Esto dará lugar a una excepción de NameError
. ¿Por qué hay un nuevo ámbito local iniciado cuando se reabre una clase? Esto parece un poco contradictorio. ¿Hay alguna manera de continuar el alcance local anterior cuando se extiende una clase?
Esta es una buena pregunta por su propia cuenta, pero hay una razón por la que desea Haga esto en lugar de almacenar una variable de instancia en el objeto de la clase en sí (es decir, reemplace 'x' con' @ x' arriba). – Phrogz
@Phrogz No, no hay ninguna razón por la que quisiera hacer esto en el código de producción. Le pido a este que rasque un picor intelectual en lugar de resolver un problema del mundo real. – Matty