我正在查看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"))
答案 0 :(得分: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 - 就像一个方法。
您可以在this SO question中看到有关Ruby中范围解析运算符的更多信息。