问题
i have some code in Ruby here below:
class A
@@lock = Monitor.new
class B
def method
@@lock.synchronize
puts "xxxxx"
end
end
end
end
after running it throws an error which said that below:
uninitialized class variable @@lock in A::B (NameError)
if i want to know how to access the outer class A's class variable @@lock from inner class B's method, how to do it? thank you in advance.
回答1:
The only way to access this class variable is via an accessor method
class A
def self.lock
@@lock ||= Monitor.new
end
class B
def method
A.lock.synchronize
puts "xxxxx"
end
end
end
end
回答2:
I don't think you can without defining an accessor.
Class B
is lexically scoped inside of A, so its real name is A::B and various other things are different.
But it's not a child or any other sort of derived class, so it doesn't actually have any special rights to see private or protected or otherwise local elements of A.
来源:https://stackoverflow.com/questions/4688588/how-to-access-a-class-variable-of-outer-class-from-inner-class-in-ruby