JRuby匿名课程

时间:2016-11-07 15:23:28

标签: jruby

如何从JRuby中的匿名类访问父类变量?
(不使用静态变量)

class MyJRubyClass  
    def initialize  
        @var1 = 1  
        @var2 = Class.new{  
            def Method1  
                @var1 = @var1 + 1  
                print @var1  
            end  
            }.new  
        @var2.Method1()  
    end  
end  

谢谢。

1 个答案:

答案 0 :(得分:1)

总是需要一点时间(和练习)来习惯新语言。 具有“独占”父类访问权限的Java内部类的概念在Ruby中是不够的。

虽然它对相关类在内部协作方面很有用,但从OOP角度来看,它并不幸运,因为对象应该是使用消息协作的“黑盒子”。这是Ruby的方法。

另一方面,Ruby没有隐藏任何东西,因为它有反射API,例如检索实例变量(该示例更喜欢暴露属性读取器/写入器):

class MyJRubyClass
  attr_accessor :var1
  def initialize  
    @var1 = 1  
    klass2 = Class.new do
      def initialize(parent); @parent = parent end
      def Method1
        print @parent.var1 = @parent.var1 + 1
        # without attr accessor : 
        #var1 = @parent.instance_variable_get(:@var1)
        #@parent.instance_varialbe_set(:@var1, var1 + 1)
      end  
    end  
    @var2 = klass2.new(self)
    @var2.Method1()
  end  
end 
相关问题