2011-01-14 21 views
5

ho qualche codice in Ruby qui sotto:come accedere a una variabile di classe di classe esterna da classe interna in rubino

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

dopo l'esecuzione genera un errore che dice che sotto:

inizializzata class variable @@ lock in A :: B (NameError)

se voglio sapere come accedere alla variabile di classe esterna classe A @@ lock dal metodo della classe interna B, come si fa? Grazie in anticipo.

risposta

1

L'unico modo per accedere a questa variabile di classe è attraverso un metodo di accesso

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

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

thank u molto! sto provando come quello che hai detto. – ywenbo

6

Io non credo che si può senza definire una funzione di accesso.

Classe B è in ambito lessicale all'interno di A, quindi il suo vero nome è A :: B e varie altre cose sono diverse.

ma non è un bambino o qualsiasi altro tipo di classe derivata, quindi in realtà non ha nessun diritti speciali di vedere elementi privati ​​o protetti o comunque locali di A.

+0

grazie per la spiegazione dettagliata – ywenbo

Problemi correlati