2017-10-24 19 views
0

私は別のファイルとtester.rbが必要なファイルrequired.rbを持っています。これらのファイルは別々に起動され、別々に実行されます。必要なファイルからのファイルの要求

required.rbの範囲内で、必要なファイルのサブディレクトリにすべてのファイルが必要です。全体のものは、このようなものになります。

main.rb 
lib/ 
    required.rb 
    req_files/ 
     req1.rb 
     req2.rb 
     req3.rb 
tester/ 
    tester.rb 

を必要なファイルをインポートするためのコードは次のようになります、私が見てきた提案の戦略で

Dir[Dir.pwd + "/req_files/*.rb"].each do |file| 
    require file 
end 

それはDir.pwdまたは__FILE__を利用すること、文脈がに適用されますrequired.rbの位置は、元のファイルが最初に要求されたファイルのコンテキストです。つまり、現在の設定でこれらのファイルを別々に要求することはできません。

実際のrequired.rbに相対的なパスを指定する方法はありますか?

EDIT:

require_relativeする必要が変化するDir[Dir.pwd + "/req_files/*.rb"]より具体的Dir.pwd元のファイル(メインまたはテスター)に対して解決するという事実を変更しないので、それは、しかしではないので、それはのように表すことができません両方のエントリポイントで動作する必要があります。

また、require_relativeで既にmain.rbtester.rbからrequired.rbが必要です。

+0

[Rubyでのrequire \ _relativeとrequireの違いは何ですか?](https://stackoverflow.com/questions/3672586/what-is-the-difference-between-require-relative-and-必要なルビー) –

+0

@ブラッドウォーター:実際には_duplicate_ではありません。なぜなら、この質問には 'require_relative'は言及されていないからです。 –

+1

悪化したターゲットをより良くした "重複"がありました。私はそれをどのようにhttps://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-itが使用されるように見ていた... –

答えて

0

ちょっと、実際のrequired.rb

はいへの相対パスを表すために方法があります。これには別の方法があります。真または偽→

http://ruby-doc.org/core-2.4.2/Kernel.html#method-i-require_relative

require_relative(文字列)

Rubyは必要なファイルのパスからの相対ライブラリという名前の文字列をロードしようとします。ファイルのパスを特定できない場合、LoadErrorが発生します。ファイルがロードされている場合はtrueを返し、そうでない場合はfalseを返します。

0

__FILE__については間違っていました。 Dir.pwdの代わりにFile.dirname(__FILE__)を使用すると、実際のファイルのディレクトリと起動するファイルのディレクトリを指定できます。

関連する問題