呼ばれているメソッドがおかしくなります
rubyのコードを書いていた時の疑問です。
以下のコードを見てみると、呼ばれているメソッドがおかしくなっているところがあるように見えます。
a = "hoge"
module Mage
def to_s
:fuga
end
end
a.extend(Mage)
a.to_s # => :fuga
a.singleton_class.ancestors # => [#<Class:#<String:0x007fdeea15c4a0>>, Mage, String, Comparable, Object, Kernel, BasicObject]
上のコードはObext#extendでto_sメソッドの挙動を上書きされていますが
継承をたどっていくと、Stringクラスのto_sメソッドではなくMageモジュールのto_sメソッドの方が、深いところに挿入されています。
継承関係と、実際に呼ばれるメソッドに齟齬があるように見えるのですが、これはどういう原因で起こるのでしょうか?