loadee.rb
puts '> This is the second file.'
loaddemo.rb
puts 'This is the first (master) program file.'
load 'loadee.rb'
puts 'And back again to the first file.'
"Ruby loaddemo.rb"
を実行すると、これは正常に機能します。両方のファイルは同じディレクトリにあり、それが私が実行するディレクトリです。
しかし、負荷をrequireに変更し、拡張機能の有無にかかわらず、次のようになります。
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load
-- loadee.rb (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from loaddemo.rb:2:in `<main>'
私の質問はもちろんですが、なぜこの場合は作業する必要がないのですか?そうすべきですよね?ロードし、異なるパスを使用する必要がありますか?
Rubyバージョン1.9.2
require
にファイル名だけを指定すると、事前定義された$LOAD_PATH
ディレクトリのみが検索されます。ただし、ファイル名にパスを指定すると、次のように機能するはずです。
puts 'This is the first (master) program file.'
require './loadee.rb'
puts 'And back again to the first file.'
代わりに、プロジェクトのフォルダーをロードパスに追加することもできます。
$LOAD_PATH.unshift File.dirname(__FILE__)
puts 'This is the first (master) program file.'
require 'loadee.rb'
puts 'And back again to the first file.'
そして最後に、代わりにrequire_relative
を使用できます。
puts 'This is the first (master) program file.'
require_relative 'loadee.rb'
puts 'And back again to the first file.'
ファイル名を使用してパスを指定してもうまくいかないようで、$LOAD_PATH
に大量のパスを詰め込みたくありませんでした。
ドキュメント をチェックすると、require_relative
が見つかりました。
require_relative 'loadee'
1.9.2
と2.1.2
の両方で機能します。
documentation は、require
が相対パスを検索することをまったく意図しておらず、load
も検索しないことを示しています。