【问题标题】:how to access a class variable of outer class from inner class in ruby如何从ruby中的内部类访问外部类的类变量
【发布时间】:2011-06-08 23:36:47
【问题描述】:

我在下面有一些 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,该怎么做呢?提前谢谢你。

【问题讨论】:

    标签: ruby class-variables


    【解决方案1】:

    我认为你不能不定义访问器。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-03
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多