开发者

how to access a class variable of outer class from inner class in ruby

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 c开发者_StackOverflow中文版lass B's method, how to do it? thank you in advance.


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.


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜