2016-11-07 72 views
1

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

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

谢谢。

+0

就像在普通的老式Ruby中一样?不确定你的意思,听起来像是你试图移植到JRuby的Java概念,因为它只是运行在Java之上,是这样吗? – kares

+0

是的,类似的东西。 –

回答

1

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

虽然它可用于相关类在内部进行合作,但从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