2016-05-23 77 views
0

我一直在寻找在引入nokogiri的源代码,并发现这一点:子模块名称应与方法名称冲突?

module Nokogiri 
    class << self 
    def XML # some args 
     # some code 
    end 
    end 
    module XML 
    # more code 
    end 
end 

怎么会名称不冲突?它如何知道我在使用Nokogiri::XML时指的是什么?这是最佳做法吗?如果是这样,这是否只是一种获得默认模块入口点的方法?

xml = Nokogiri::XML(open("www.foo.com/bar.xml")) 

回答

2

他们真的看起来很相似:

module Noko 
    class << self 
    def XML # some args 
     'method' 
    end 
    end 
    module XML 
    end 
end 
Noko::XML #access to a module 
=> Noko::XML 
Noko.XML # access to class method 
=> "method" 
Noko::XML() #access to a class method too 
=> "method" 

因此,我们可以说,如果没有任何PARAMS这个表达式就像一个模块,使用参数 - 就像一个方法。

有关Ruby中的范围解析运算符的更多信息,请参阅this SO question