2017-08-15 28 views
0

私はここで具体的には、自作のレポのコードベースを通じてファイルを読んでいる:ここにどのファイルが必要かをどのようにして知ることができますか?

https://github.com/Homebrew/brew/blob/8518ffdee19c0c985e8631e836b78624e4926c7f/Library/Homebrew/brew.rb

は、私はライン104(require 'tap')上のインスタンスのために、ファイルに散らばっ多くの「必要」の文を参照してください。名前のクラスメソッドでTapという名前のクラスが含まれている

さらにダウン私はTap.fetch...を参照してくださいコードで Library/Homebrew/cmd/tap.rb Library/Homebrew/compat/tap.rb

Library/Homebrew/tap.rb、およびLibrary/Homebrew/tap.rb中:問題は、私はコードベースでtap.rbという名前の3つのファイルを参照してくださいということですfetch、これは正しいファイルであると確信しています。しかし、おそらく同じファイル名を持つ数十のファイルが存在する可能性があり、そのうちの複数のファイルが同じクラスメソッドを持つ可能性があります。私の質問は、それぞれのファイルを調べずにどのTapクラスがロードされているのかを知る方法はありますか?

更新:私の質問に答えがあると思います(下記参照)。

+0

ファイルは 'ライブラリ/自作/ tap.rb'があるロード。 'Library/Homebrew/cmd/tap.rb'には' brew tap'コマンドを扱うコードが含まれています。 'tap'がコマンドラインで提供されるHomebrewコマンドであるとき、それは[line 61](https://github.com/Homebrew/brew/blob/8518ffdee19c0c985e8631e836b78624e4926c7f/Library/Homebrew/brew.rb#L61)に明示的にロードされます'brew tap ...')。 – axiac

答えて

0

私はRubyでどのようにrequire作品のこの偉大な説明が見つかりました:それはUNIXバイナリを探すために$ PATH変数を使用する方法と似ルビー$LOAD_PATH方法、を見ることで動作しますが、基本的に

https://github.com/ericmathison/articles/blob/master/understaning-require-in-ruby.md

をCLIでコマンドを受信すると、実行可能ファイルが表示されます。私はそうのように、同じディレクトリに2つのファイルを作ることによって、私の地元でこれをテストすることができました:

# file number 1- foobar.rb 

module Foobar 
    module_function 

    def bar 
    p "foo" 
    end 

end 

# file number 2- foobaz.rb 

$LOAD_PATH.unshift(".") 

class Foobaz 

    def baz 
    require 'foobar' 
    p Foobar.bar 
    end 

end 

Foobaz.new.baz 

をfoobaz.rbの行$LOAD_PATH.unshift(".")がなければ、コードはシンプルrequire 'foobar'文で実行されません。代わりにrequire_relative 'foobar.rb'を使用しなければなりませんでした。しかし、現在の作業ディレクトリを$ LOAD_PATH環境変数に追加すると、現在のディレクトリ内のすべてのルビファイルにアクセスできるようになり、実行されました!

NB- $LOAD_PATH.を追加すると、requireと同じファイルではなく、どこかの設定ファイルに入るはずです。

0

requireの前にbinding.pryを置き、$:を実行すると、requireが 'tap.rb'ファイルを検索するディレクトリのリストになります。

参照の定義が必要です。 If the filename does not resolve to an absolute path, it will be searched for in the directories listed in $:.

関連する問題