さて、裏側では磯クリの作業効率化と言うことでRubyのモジュールの作成中。今回は外部のモジュールを読み込む処理をやっています。
外部のモジュールを読み出す場合、モジュールを名前で指定する形になります。
そのあと文字列をModuleオブジェクト、Classオブジェクトに変換するにはObject#instance_evalメソッドを使用します。
mod = instance_eval(modname)
ファイル名がcode.rb、モジュール名がCodeだとすると、以下のような感じです。
name = "code.rb" require name modname = File.basename(name, ".*").capitalize mod = instance_eval(modname)
それから、こうやれば、ブロックを出たときにcode.rbはrequireされてない状態になるので・・・
name = "code.rb" mod = nil instance_eval do require name modname = File.basename(name, ".*").capitalize mod = instance_eval(modname) end
mod変数がTestモジュールを握る唯一の変数になります。外部モジュールを名前で呼び出すとなると、うっかりモジュール名が被っちゃったりといったケースが心配ですが、これなら被ることはなさそうです。
検証コードが間違っていました。さすがにそんなことはないようです。