obj.methodルビーが次のように検索する原因methodになったという印象を受けました。
- のシングルトン
objクラスを調べます。 objのシングルトン クラスに含まれるモジュールを調べます。objさんのクラスを見てください。objのクラスに含まれるモジュールを調べます- クラスのスーパークラスが見つかるまで、手順 3 と 4 を繰り返します。
method_missing見つからない場合は、元のオブジェクト を呼び出しますobj。
このモデルでは、メソッドを検索する唯一のシングルトン クラスは、元のレシーバーのシングルトン クラス ですobj。ただし、このモデルでは、サブクラスがそのスーパークラスのシングルトン メソッドにアクセスできるという事実を説明できません。例えば
class Foo
def self.foo
"foo"
end
end
class Bar < Foo
end
Bar.foo #=> "foo"
Fooこれは、ある時点でシングルトン クラスがメソッドを検索することを意味すると信じているため、私は混乱していfooます。ただし、上記のモデルでは、Barのシングルトン クラスのみが検索されると予想されfooます。Barそれができなければ、ルビーがのクラスを調べClass、スーパークラス チェーンをクロールし続ける (Fooおよびそのシングルトン クラスを完全にスキップする)ことを期待します。
だから私の質問: クラスがそのスーパークラスのシングルトン メソッドにアクセスできるという事実を説明する Ruby メソッド ルックアップの私の理解に欠けているものは何ですか?