最近、Rubyでのクラスに関する詳細を調べていて、クラス定義で混乱していました。 RubyでRubyでのクラス定義について
、次のようにクラス定義は、
class A
def self.my_method
end
end
あり、私は混乱していた
class A
class << self
def my_method
end
end
end
と同じです。第1の場合、selfは現在オブジェクトを使用しているポインタへのポインタとみなすことができ、コンテキストの現在のクラスはAです。メソッドルックアップは再帰的に行われます。しかし、私の質問は、defは何ですか?現在のオブジェクトとコンテキストをどのように変更しますか?問題は2番目のケースでも同じです。 クラス< <自己のような記述は、現在のオブジェクトとコンテキストをどのように変更しますか?
そして別の質問です。私が知る限り、すべてのClassオブジェクトは同じ定義を持つ同じClassオブジェクトを共有するため、フライウェイトのようなデザインパターンに従っています。それで、固有クラスが混乱しました。固有クラスのdefは実際にClassオブジェクトを持つメソッドを定義するので、 "def self。*"にどのように関連付けることができますか?
外から見ると複雑すぎて、Rubyのデザインの詳細が必要な場合があります。
実際に私はあなたの混乱を受けていません... selfはシングルトンクラスのインスタンスですので、 'def self.foobar'はクラスメソッドを宣言し、' def foobar'はselfが現在のインスタンスであるインスタンスメソッドを宣言します。あなたの場合については ...どちらも同じではないでしょうか? (あなたはクラスメソッドを宣言しています) – robustus
これはおそらく役立ちます:http://stackoverflow.com/questions/1630815/why-isnt-the-eigenclass-equivalent-to-self-class-when-it-looks-so-similar/ 1631005#1631005 –