Ruby の module 内で include したかった
多分基本的なことなのだろうけどハマったので覚書。
さて、Ruby の module を書いている時に次のように include してメソッドにアクセスしたかったのですがこれだとうまく動作しませんでした。
module X def funcX :homu end module_function :funcX end module Y # module 内で funcY を使いたい include X def funcY funcX end module_function :funcY end # Error: undefined local variable or method `funcX' for Y:Module Y.funcY
include ではなくて extend を使う
そもそもこの場合はインスタンスメソッドではなくてクラスメソッドとして取り込む必要があるので include ではなくて extend を使用する必要があります。
module X def funcX :homu end module_function :funcX end module Y extend X def funcY funcX end module_function :funcY end # OK Y.funcY
こういう Ruby の細かい挙動はまだあまり慣れてないのではまりやすい…。