2017-08-15 59 views
0

我在这里读通过家酿回购的代码库,特别是文件:如何判断哪个文件需要在这里?

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

我看到散落在众多的文件“要求”语句,例如在线路104(require 'tap')。问题是,我看到3个文件中的代码库名为tap.rb

Library/Homebrew/tap.rb Library/Homebrew/cmd/tap.rb Library/Homebrew/compat/tap.rb

在我看到Tap.fetch...代码再往下,在Library/Homebrew/tap.rb其中包含一个名为类方法命名Tapfetch,所以我确信这是包含的正确文件。但可以想象,可能有数十个文件具有相同的文件名,并且其中多个文件可能具有相同的类方法。我的问题是,有没有办法告诉哪个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) '酿造水龙头...')。 – axiac

回答

0

我发现如何require作品在Ruby中这很好的解释:

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

从本质上讲,它的工作原理是在看红宝石$LOAD_PATH方法,类似于UNIX如何使用$ PATH变量来寻找二进制当它在CLI中接收到一个命令时可执行文件。我能够在同一目录做两个文件,以测试这一点上我的地方,像这样:

# 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环境变量中意味着我现在可以访问当前目录中的所有ruby文件,因此它可以执行!

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 $:.

相关问题