最近、Ruby のクラスの詳細を調べていて、クラス定義に混乱していました。
Ruby では、クラス定義は次のようになります。
class A
def self.my_method
end
end
そしてそれはと同じです
class A
class << self
def my_method
end
end
end
それから私は混乱しました。最初のケースでは、self は現在使用中のオブジェクトへのポインターと見なすことができ、コンテキストの現在のクラスは A です。メソッドの検索は再帰的に行われます。しかし、私の質問は、defは何をするのでしょうか? 現在のオブジェクトとコンテキストをどのように変更しますか? 問題は2番目のケースでも同じです。class << selfのような記述は、現在のオブジェクトとコンテキストをどのように変更しますか?
そして別の質問です。私の知る限り、すべての Class オブジェクトは fly-weight のような設計パターンに従っています。それらは同じ Class オブジェクトを同じ定義で共有しているためです。その後、固有クラスが混乱しました。固有クラスの def は実際には Class オブジェクトでメソッドを定義しているため、「def self.*」とどのように関連付けることができるでしょうか。
見た目が複雑すぎて、Ruby の設計詳細が必要なのかもしれません。