2011-01-14 46 views
5

tengo algo de código en Ruby aquí abajo:cómo acceder a una variable de clase de la clase externa de clase interna en rubí

class A 
    @@lock = Monitor.new 
    class B 
    def method 
     @@lock.synchronize 
     puts "xxxxx" 
     end 
    end 
    end 
end  

después de ejecutar tiros un error que dice que a continuación:

sin inicializar variable de clase @@ lock en A :: B (NameError)

si quiero saber cómo acceder a la variable de clase clase externa A @@ lock desde el método de la clase interna B, ¿cómo hacerlo? gracias de antemano.

Respuesta

1

La única forma de acceder a esta variable de clase es a través de un método de acceso

class A 
    def self.lock 
    @@lock ||= Monitor.new 
    end 

    class B 
    def method 
     A.lock.synchronize 
     puts "xxxxx" 
     end 
    end 
    end 
end 
+0

gracias u mucho! Lo intento como dijiste. – ywenbo

6

no creo que pueda, sin definir un descriptor de acceso.

La clase B tiene un alcance léxico dentro de A, por lo que su nombre real es A :: B y varias otras cosas son diferentes.

pero no es un niño o cualquier otro tipo de clase derivada, por lo que en realidad no tiene ningún derecho especial para ver los elementos privados o protegidos o no locales de A.

+0

gracias por su explicación detallada – ywenbo

Cuestiones relacionadas