2011年10月19日水曜日

Rubyでカレントディレクトリのモジュールのrequire

Ruby1.9.2より、current directoryにあるモジュールを
requireするには、絶対パスにしないとならないようです。
LOAD_PATHから「.」が削除されたそうです。

絶対パス以外の方法では、require ではなく require_relative を使用することも可能ですが、
逆に1.8系では、require_relative がないので、両バージョンで使うとエラーになるので
注意が必要です。

1.8と1.9系なら、こんな書き方になるでしょうか。
require File.expand_path(File.join(File.dirname(__FILE__), 'moduletest'))

1.9系なら、これだけでもありですね。
require_relative 'moduletest'

1.9系では使えません。
require 'moduletest'

1.9系でrequireが絶対パスになっていない場合はこんな感じのエラー。
$ ruby test.rb
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- moduletest (LoadError)

1.8系でrequire_relativeを使うとこんな感じのエラー。
$ ruby test.rb
test.rb:5: undefined method `require_relative' for main:Object (NoMethodError)

参考サイト:
http://stackoverflow.com/questions/2900370/why-does-ruby-1-9-2-remove-from-load-path-and-whats-the-alternative

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。