0

定義がトップレベルで実行され、結果が驚くべきものである場合、Ruby でメソッドが定義されている場所を確認するためにチェックしていました。

def foo; end

singleton_class != Object # => true
self.class == Object      # => true

m1 = singleton_class.instance_method :foo
# => #<UnboundMethod: Object#foo>

m2 = Object.instance_method :foo
# => #<UnboundMethod: Object#foo>

m1 == m2                  # => true

foo同時に2つのクラスで定義されているようです! 説明はありますか?

4

1 に答える 1

0

その質問は本当に意味がありません。メソッドは で定義されていObjectます。もちろん、シングルトン クラスを介してアクセスすることもできますが、そこでは定義されていません。

singleton_class.instance_methods(false).grep /foo/  # => []

はぁ...

于 2012-11-27T16:07:34.997 に答える