2016-11-07 118 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