謎な行為
最近、こんなコードを書きました。
名前空間わけて使いたいものを
モジュールとして定義しとく。
fuga/hoge_util.rb
module Fuga::HogeUtil def benri_method print "totemo benri!" end ... end
使いたいクラスを書いとく。
ここでは、後で使うかもしれないモジュールを
Module#autoload(const, path)で定義しとく。
fuga.rb
class Fuga autoload :HogeUtil, 'fuga/hoge_util.rb' ... end
実際に使う場面では、
インスタンスを生成したあとで
Object#extend Mod する。
事前に Module#autoload されているので
Mod が呼ばれたタイミングで Kernel#requireされる
use_case.rb
require 'fuga.rb' fuga = Fuga.new fuga.extend HogeUtil fuga.benri_method #=> "totemo benri!"
実際やってみるとイチイチ Object#extend するのが
面倒だったりする。
最初から クラス定義の中で include Mod しておけばいいのかもしれないけど。
事前になんでも include されていると実際にクラスを使う場面になって、使いもしないモジュールが include されているのもなんだかなぁ…っていう気がしなくもない。
要約すると、個人的に Module#autoload が好きなんだけど。
なんかうまく活用する方法が見つからない。
……っていうことなんだけどね。