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 メソッド ルックアップの私の理解に欠けているものは何ですか?