3

相対パスと絶対パスを受け入れるがあることを考えると、絶対パスのみを受け入れるrequire_relativeを特に使用する理由はありrequireますか? すべてrequireを置き換えることができますrequire_relativeか?

編集

require_relativeSergio Tulentsev は、宝石に使用できない私に気づきました。なぜそのように設計されているのですか?require_relativeの単なるスーパーセットでrequireありrequire、廃止された場合、どのような問題が発生しますか? それとも、require_relativegem が Ruby コアシステムに組み込まれるよりも後に登場し、作者がrequire_relativegems システム周辺のコードに変更を加えていないだけなのでしょうか?

4

3 に答える 3

6
require 'json'

requiregem からのコードを要求するためにも使用できますが、それrequire_relativeはできません。したがって、後者は前者の代わりにはなりません。

RE: 編集

あなたの追加の質問に対する答えは、コードの複雑さだと思います。requireライブラリパスを検索する追加機能があります。require_relativeベースパスなどを置き換えます。すべての機能を同じ関数に統合すると、おそらく非常に複雑になります。コードが複雑になるほど、バグが発生する可能性が高くなります。それは私の推測です。

于 2013-09-02T09:37:16.290 に答える
0

Ruby には、ルックアップ-Iのためにディレクトリを含めるためのフラグがあります。requireそのpushため、変数へのフォルダー$:(つまりENV['PATH']) を使用するかIsome_lib、コマンド ラインで をrequire使用すると、そのファイルのベース フォルダーの場所を指定せずに使用できます。

require_relative__FILE__ディレクトリの場所を使用して、必要なファイルの場所を参照するという別の目的で使用されますrequire。そのため、gem からファイルを要求するために使用できますが、そのためにはより多くの作業が必要になる可能性があります。gem を「販売」して、アプリケーションに非常に近い、または含まれているディレクトリに配置できることを認識します。通常、インストールされた gem$PATHは検索を容易にするために に配置されるため、通常は必要ありません。

ただし、 gem を使用して要求することrequire_relativeはアンチパターンです。おそらくGemfile、ファイルのソースを指定できる場所でgem として要求する必要がありBundler、おそらく を使用してアプリケーションの環境が読み込まれるためです。

于 2013-09-02T18:00:54.287 に答える