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

ブログで見つけた上記の例では、TABLEがハッシュであり、MySymbolクラスのメンバーであることを理解しています。私が理解していないのは、Stringクラス内からパブリックにアクセスする方法です。クラスインスタンス変数はデフォルトでプライベートであり、クラスの外部からそれらにアクセスするにはget / setメソッドを使用する必要があると思いましたか?

4

1 に答える 1

5

あなたの例でTABLEは、インスタンス(またはクラス)変数ではなく定数です(つまり、接頭辞 wit ではありません@)。

また、インスタンス変数は「デフォルトでプライベート」ではありません (たとえば、C++ クラスの場合のように)。ただし、表面的にはそのように見える場合があります。それらは「プライベート」であるためではなく、設計上、クラスの外部からアクセスすることはできません (「非プライベート」にすることはできません)。

于 2009-03-18T01:47:24.113 に答える