JRuby 匿名 类

JRuby anonymous classes

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

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

谢谢。

习惯一门新语言总是需要一些时间(和练习)。 Java 的内部 class 具有 'exclusive' 父级 class 访问权限的概念在 Ruby.

中是不够的

虽然它对相关的 class 对象在内部协作很有用,但从 OOP 的角度来看,它并不幸运,因为对象应该 "black-boxes" 使用消息进行协作。这是某种程度上 Ruby 的方法。

另一方面 Ruby 没有隐藏任何东西,因为它有反射 API,例如检索实例变量(该示例更喜欢公开属性 reader/writer):

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