如何从ruby中的内部类访问外部类的类变量

时间:2011-01-14 06:38:33

标签: ruby class-variables

我在下面的Ruby中有一些代码:

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

运行后会抛出一个错误,表示如下:

未初始化的类变量@@ lock in A :: B(NameError)

如果我想知道如何从内部类B的方法访问外部类A的类变量@@ lock,该怎么做?提前谢谢你。

2 个答案:

答案 0 :(得分:6)

如果没有定义访问者,我认为你不能。

B在词法范围内是A,所以它的真名是A :: B,其他各种不同。

但它不是孩子或任何其他类型的派生类,因此它实际上没有任何特殊权利可以查看A的私有或受保护或其他本地元素。

答案 1 :(得分:1)

访问此类变量的唯一方法是通过访问器方法

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

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