Sample code
/top/app/main.rb
main.rb
eval(File.read(File.expand_path("../sub.rb" ,__FILE__)))
/top/app/sub.rb
sub.rb
eval(File.read(File.expand_path("../something.rb" ,__FILE__)))
このように、main.rb
がsub.rb
を読み込み評価して、sub.rb
がsomething.rb
を読み込み評価することを期待している。
このときtop
ディレクトリで、ruby ./app/main.rb
を実行した場合には、sub.rb
のFILEは.
を示す。このため、something.rb
の読み込みには失敗する。
以下のようにbinding
オブジェクトを渡して、main.rbのコンテキストをsub.rb
に渡してあげると成功する。
main.rb
eval(File.read(File.expand_path("../sub.rb" ,__FILE__)), binding)