我在下面的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,该怎么做?提前谢谢你。
答案 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