Ruby で define_method で定義した中から super を呼び出す
次のようなコードで define_method
内から super
を呼びだそうとしたらエラーになりました。
module M define_method :homu do p :superhomu # ここで元のメソッドを呼び出したかった super end end class X prepend M def homu p :homu end end X.new.homu # Error: in `block in <module:M>': implicit argument passing of super from method defined by define_method() is not supported.
解決
super
に ()
をつければ解決します。
module M define_method :homu do p :superhomu # () を着けて呼び出す super() end end class X prepend M def homu p :homu end end X.new.homu # OK
これで super
から X#homu
が呼び出されます。