requireだと、ロードするファイルのファイル名に .rbや.soという拡張子を明示的に書かなくても良くて、ロードパスにあるファイルをロード対象として探してくれるというのは分かります。loadは相対、絶対にかかわらずパス指定が必須ですよね。
また、requireはloadと違って、すでにロード済みのモジュールを読み込まないので二重読み込みや実行効率上有利だというのも分かります。では、逆にloadを使うべきときはいつなのでしょうか?
「loadを使うべき」というよりは「loadでないといけない」場面ですよね。
既にhsbtさんが回答しておられるような場合もそうですし、knsmrさん自身が書いておられるように「requireはloadと違って、すでにロード済みのモジュールを読み込まないので」どうしても二重読みさせたい場合に必要になります。
例えばRailsではdevelopment環境ではapp以下(だけじゃないかも)のスクリプトが更新されていれば再読み込みしますが、これを実現するにはrequireでなくloadが必要になります。
load の第二引数を利用したいときにも利用します.
るりまから引用します.
http://rurema.clear-code.com/1.9.3/method/Kernel/m/load.html
load(file, priv = false) -> true
(中略)
[PARAM] priv:
真のとき、ロード・実行は内部的に生成される無名モジュールをトップレベルとして行われ、グローバルな名前空間を汚染しません。
(後略)
rspec.rake
のような拡張子が rb, so 以外のファイルを読み込むときに使ってます。
以下のように、拡張子が.txtのようなファイルは load
でないと読み込めません。
$ cat hello.txt
puts "hello"
$ irb
> require './hello.txt'
LoadError: cannot load such file -- ./hello.txt
from /Users/ken/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /Users/ken/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from (irb):3
from /Users/ken/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
> load './hello.txt'
hello
=> true
>
この質問への回答やコメントをメールでお知らせします。