5

以下にRubyのコードがあります。

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

実行後、以下のようなエラーがスローされます。

初期化されていないクラス変数@@lockin A :: B(NameError)

内部クラスBのメソッドから外部クラスAのクラス変数@@lockにアクセスする方法を知りたい場合は、どうすればよいですか?前もって感謝します。

4

2 に答える 2

6

アクセサーを定義せずにできるとは思いません。

クラスBはAの内部で字句スコープが設定されているため、実際の名前はA :: Bであり、他のさまざまなものは異なります。

ただし、これは子やその他の派生クラスではないため、Aのプライベート要素、保護要素、またはローカル要素を表示する特別な権限は実際にはありません。

于 2011-01-14T06:46:13.563 に答える
1

このクラス変数にアクセスする唯一の方法は、アクセサーメソッドを使用することです。

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

   class B
     def method
       A.lock.synchronize
         puts "xxxxx"
       end
     end
   end
 end
于 2011-01-14T06:42:31.487 に答える