Rubyで、他のファイルを取り込むときにrequireとloadがある。 違いをしらべてみた。
結論
結論からいうと、
- コードの中で使う場合は require
- irbのなかで使う場合は load
詳細
コードのなかでloadをつかってはいけない理由
loadをコードの中で利用すると、無限ロードがが発生する可能性がある。 具体的には、A.rbでは、load ‘./B’, B.rbでは load ‘./A’を宣言している場合、 2つのファイルがお互いに互いをloadしあう。(C言語での2重インクルード)
なので、コードのなかでloadをつかうのは危険。
irbのなかでrequireをつかってはいけない理由
requireをつかうと、一度取り込まれた修正は更新されない。loadをつかうと更新される。 そのため、コードを修正たあとにirbでデバッグしようとしたときに、修正をirbに取り込むことができない。
loadを利用すると、再度修正を取り込むことができる。
Tips
以下のように書くと、irbからloadしても修正は取り込まれない。
if $0 == __FILE__
...
end
irbから実行した場合、__FILE__は irb、$0はファイル名になる。