2011-01-14 120 views
5

我有在紅寶石一些代碼在這裏下面:如何從內部類訪問外部類的類變量在紅寶石

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

運行它後引發錯誤,其表示如下:

未初始化(NameError)

如果我想知道如何從內部類B的方法訪問外部類A的類變量@@ lock,該怎麼做?先謝謝你。

回答

1

訪問此類變量的唯一方法是通過訪問方法

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

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

感謝ü非常感謝!我正在努力如你所說。 – ywenbo 2011-01-14 06:44:02

6

我不認爲你可以不定義訪問。

B在A的範圍內,所以它的真名是A :: B,其他的東西都不一樣。

但它不是一個孩子或任何其他類型的派生類的,所以它實際上沒有任何特殊的權利,看到A的私有或保護或本地元素

+0

感謝您的詳細解釋 – ywenbo 2011-01-14 06:56:57