高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

Rubyで外部モジュールの読み出し

さて、裏側では磯クリの作業効率化と言うことで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モジュールを握る唯一の変数になります。外部モジュールを名前で呼び出すとなると、うっかりモジュール名が被っちゃったりといったケースが心配ですが、これなら被ることはなさそうです。

検証コードが間違っていました。さすがにそんなことはないようです。