2017-02-24 10 views
-1

です:これらの2つのステートメントはRubyで同じですか?

これと同じ
require './test_req.rb' 

:Rubyで

require './test_req' 

この

require_relative 'test_req.rb' 

?私はこれらの3つの違いを研究しており、機能性を見出すことはできません。

+0

最初の2つのステートメントの違いはありません。彼らは同じように見える –

+0

@リチャードハミルトン申し訳ありませんが、私は2番目の例から拡張子を削除しました。 – anemaria20

+4

あなたはいくつかの簡単なテストでこれにあなた自身で答えることはできませんか? –

答えて

2

です:

これと同じ
require './test_req.rb' 

require './test_req' 

最初のものは、現在の作業ディレクトリにtest_req.rbという名前のファイルを探しますいいえ。 2つ目は、現在の作業ディレクトリに実装定義ファイルのセットを探します。 YARVはtest_req.rb,test_req.rbw,test_req.so,test_req.dllおよびtest_req.dylibを検索します。 JRubyは、test_req.rbtest_req.rbwtest_req.sotest_req.dlltest_req.dylibtest_req.class、およびtest_req.jarを検索します。 Rubiniusは、test_req.rb,test_req.rbwtest_req.sotest_req.dlltest_req.dylib、およびtest_req.rbaを検索します。 (注:このリストはメモリからのものですので、二重チェックはしません)

これらの両方がでない場合は、を使用する必要があります。現在の作業ディレクトリは、スクリプトの制御外にあります。最良の場合、これは、脆弱なスクリプトにつながり、スクリプトが実行されたときに現在の作業ディレクトリが何であっても、LoadErrorで失敗することがあります。ただし、スクリプトの制御外にある現在の作業ディレクトリだけでなく、呼び出し元の制御下にあります。これは、呼び出し元がスクリプト内に任意のコードを挿入できることを意味します。test_req.rbを制御下にあるディレクトリに置き、スクリプトを呼び出す前にそのディレクトリを現在の作業ディレクトリとして設定します。

だからこそ、.はRuby 1.9の$LOAD_PATHから削除されたので、絶対に使用しないでください。

この

require_relative 'test_req.rb' 

これは、他の2つのいずれかと同等ではありません。これにより、現在実行中のファイルではなく現在の作業ディレクトリと同じディレクトリにあるtest_req.rbという名前のファイルが検索されます。

関連する問題