2009-03-18 9 views
2
class MySymbol 
    TABLE={} 
    def initialize(str) @str = str end 
    def to_s() @str end 
    def ==(other) 
    self.object_id == other.object_id 
    end 
end 

class String 
    def my_intern 
    table = MySymbol::TABLE 
    unless table.has_key?(self) 
     table[self] = MySymbol.new(self) 
    end 
    table[self] 
    end 
end 

"foo".my_intern 

Dans l'exemple ci-dessus, que j'ai trouvé sur un blog, je comprends que le tableau est un hachage et est membre de la classe MySymbol. Ce que je ne comprends pas, c'est comment on peut y accéder publiquement depuis la classe String. Je pensais que les variables d'instance de classe sont privées par défaut et que vous devez utiliser des méthodes get/set pour les accéder depuis l'extérieur de la classe?Pourquoi est publiquement accessible dans mon exemple: « MySymbol :: TABLE »

Répondre

5

Dans votre exemple, TABLE est une variable constante et non une instance (ou classe) (non préfixé esprit @.)

En outre, les variables d'instance ne sont pas « privée par défaut » (par exemple, comme cela est le cas avec des classes C++), bien que cela puisse sembler superficiel; ils ne sont tout simplement pas accessibles en dehors de la classe par conception, pas parce qu'ils sont "privés" (vous ne pouvez pas les rendre "non-privés".)

Questions connexes