2016-11-07 1 views
1

Comment accéder aux variables de classes parentes d'une classe anonyme dans JRuby?
(sans utiliser les variables statiques)JRuby classes anonymes

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

Merci.

+0

comme dans le vieux Ruby? Vous ne savez pas ce que vous voulez dire, cela ressemble à des concepts de Java que vous essayez de transplanter dans JRuby juste parce qu'il fonctionne sur Java, est-ce le cas? – kares

+0

oui, quelque chose comme ça. –

Répondre

1

Il faut toujours un peu de temps (et de pratique) pour s'habituer à une nouvelle langue. Le concept des classes internes de Java ayant un accès 'exclusif' à la classe parente ne convient pas dans Ruby.

Bien qu'il soit utile pour les classes liées de coopérer sur les internes, du point de vue de la POO, ce n'est pas un avantage car les objets doivent être des «boîtes noires» qui coopèrent en utilisant des messages. C'est en quelque sorte l'approche de Ruby. D'autre part, Ruby ne cache rien car il possède des API de réflexion, par ex. récupérer les variables d'instance (l'exemple préfère exposer un lecteur/enregistreur d'attributs):

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