5

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

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

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

A::B 中未初始化的类变量 @@lock (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 回答