18 Feb 2014, 23:59

Rubyでのloadとrequireの違いをしらべたメモ

Rubyで、他のファイルを取り込むときにrequireとloadがある。 違いをしらべてみた。

結論

結論からいうと、

  • コードの中で使う場合は require
  • irbのなかで使う場合は load

詳細

コードのなかでloadをつかってはいけない理由

<div class="outline-text-3" id="text-2-1">
  <p>
    loadをコードの中で利用すると、無限ロードがが発生する可能性がある。 具体的には、A.rbでは、load &#8216;./B&#8217;, B.rbでは load &#8216;./A&#8217;を宣言している場合、 2つのファイルがお互いに互いをloadしあう。(C言語での2重インクルード)
  </p>

  <p>
    なので、コードのなかでloadをつかうのは危険。
  </p></p>
</div></p>

irbのなかでrequireをつかってはいけない理由

<div class="outline-text-3" id="text-2-2">
  <p>
    requireをつかうと、一度取り込まれた修正は更新されない。loadをつかうと更新される。 そのため、コードを修正たあとにirbでデバッグしようとしたときに、修正をirbに取り込むことができない。
  </p>

  <p>
    loadを利用すると、再度修正を取り込むことができる。
  </p></p>
</div>

<div id="outline-container-sec-2-2-1" class="outline-4">
  <h4 id="sec-2-2-1">
    Tips
  </h4>

  <div class="outline-text-4" id="text-2-2-1">
    <p>
      以下のように書くと、irbからloadしても修正は取り込まれない。
    </p>

    <pre><code>

if $0 == FILE … end

    <p>
      irbから実行した場合、__FILE__は irb、$0はファイル名になる。
    </p></p>
  </div></p>
</div></p>