2008-05-28
■[ruby]require "../"は$LOAD_PATHをサーチしない
昨日のつづき。
$LOAD_PATH << File.dirname(__FILE__) require "child/../../parent.rb" # これはできるのに require "../parent.rb" # これはできない
はなぜできないのか。いや、カレントディレクトリからの親ディレクトリはロードできるんだけど、スクリプト自体のファイルパスからの親は指定できないのはなぜか。
ruby-listメーリングリストのこのあたりをよんでいて気がついたんだけど、おそらく"../"や、"./"から始まるパスは、あくまでカレントディレクトリからのパスとして認識して、$LOAD_PATHにあるパスをサーチしないのではないだろうか。
つまり、requireで受けとるパスには
の3種類を指定できるっぽい。(ちゃんと確認しろよ)
ただ、基本的には、実行時にちゃんとライブラリの場所を意識せずに使うってのはruby的にありえない(ような気がする)ので、-Iオプションで指定するなりして、実行者が$LOAD_PATHに加えて実行というのが正統派なような。
