2011-01-14 13 views
5

mam jakiś kod w Ruby tutaj poniżej:jak uzyskać dostęp do klasy zmiennej klasy zewnętrznej od wewnętrznej klasy w Ruby

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

po uruchomieniu go zgłasza błąd, który powiedział, że poniżej:

niezainicjowany zmienna klasy @@ lock w A :: B (NameError)

jeśli chcę wiedzieć, jak uzyskać dostęp do zewnętrznej klasy klasy A @@ lock z wewnętrznej metody klasy B, jak to zrobić? z góry dziękuję.

Odpowiedz

1

Jedynym sposobem, aby uzyskać dostęp do tej zmiennej klasy odbywa się za pomocą metody akcesor

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

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

dziękuje u bardzo mocno! Próbuję jak powiedziałeś. – ywenbo

6

Nie sądzę, można bez definiowania akcesor.

Klasa jest leksykalna w zakresie A, więc jej prawdziwe imię to A :: B, a różne inne rzeczy są różne.

Ale nie jest to dziecko lub inny rodzaj klasy pochodnej, więc faktycznie nie ma żadnych specjalnych uprawnień, aby zobaczyć elementy prywatnych lub chronionych lub inaczej lokalnych A.

+0

dziękuję za szczegółowe wyjaśnienie – ywenbo

Powiązane problemy