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
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
oui, quelque chose comme ça. –