読者です 読者をやめる 読者になる 読者になる

三流プログラマの雑記

プログラム、ゲーム、株、その他雑記など書いてます。

Rubyによる動的ライブラリの読み込み処理をちょっとだけ考えてみる、、、

Ruby

うーむ、、、Rubyスクリプトを書いていてふと思う。

動的にディレクトリ配下のファイルを include するのはちょいとめんどくさいなぁ、、、っと
微妙なコーディングだけど、、、ちょっとだけ考えてみる。
ってことで、ディレクトリ構成を以下のようにしてみる。(クラス名とかは適当、、、)

lib/.
lib/..
lib/module/hoge1.rb
lib/hoge/huga1.rb
lib/lib_load.rb
exec.rb

そして、コードはこんな感じにしてみた。

Class LibLoad

  lib_files = ->(dir = "#{File.expand_path(File.dirname(__FILE__))}"){
    files = Array.new
    Dir.entries(dir).each do |entry|
      next if /^\.{1,2}$/ =~ entry
      path = "#{dir}/#{entry}"
      if FileTest.directory?(path)
        files.concat(lib_files.call(path))
      else
        files << path
      end
    end
    files
  }

  lib_files.call.each do |file|
    require file
    next if file.index('/module/').nil?
    include Object.const_get(File.basename(file, '.*').capitalize)
  end

  def initialize
  end

end

確かに読み込んでやりたいことができた。

が、そもそも lambda で書く必要ないよな、、、そもそも定義位置依存するのをどうにかしたい。
こういう時って、プロトタイプもどきを構築したり、method_missing使うほうがいいのだろうか。