http://at-grandpa.hatenablog.jp/entry/2016/02/14/090544
こちらの記事を参考にしています。
module M def m_method "m_method" end end class C prepend M # モジュールをprepend def c_instance_method @my_var = 1 end end obj = C.new obj.m_method # モジュールのメソッドを呼び出す
prependを使った場合、prependしたmoduleは継承関係の一番下に入ります。ここまでは理解できています。
しかし、このコードの場合のメソッド探索についてしっくり来ません。
この場合、module MはClass Cの下。
つまりC→Object→BasicObjectと探していきNoMethodErrorになると思っていました。
しかし、実際は上記記事のようにm_methodは呼ばれています。
説明ではobj→C→Object→BasicObjectのようになっていました。
何故ここでobjからメソッド探索が始まっているのでしょうか?
objはClass Cのインスタンスが入った変数ではないのですか?
実際に
irb(main):033:0> obj = C.new => #<C:0x007f9cd29a0c88> irb(main):034:0> obj.class => C
objのクラスを見てもCであり、理解に悩んでいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/19 07:18
2017/10/20 01:44
2017/10/20 04:27