Nokogiri::HTML('string') 这样的代码是如何工作的? `HTML` 是 Nokogiri 的 class 方法吗?

How does code like Nokogiri::HTML('string') work? Is `HTML` a class method of Nokogiri?

我知道 Nokogiri 是一个模块,Nokogiri::HTML 是一个命名空间模块:

Nokogiri.class # => Module
Nokogiri::HTML.class # => Module

我理解像 Nokogiri::HTML.fragment(string) 这样的代码;片段是 HTML 模块中定义的 class method(如果使用 extend self,则为 'instance method')

我不明白如何将参数传递给像 Nokogiri::HTML('string') 这样的模块。

我看到 :: 不仅可以用来访问命名空间 class/model,还可以用来访问 class 方法。在Nokogiri::HTML('string')中,HTML是Nokogori模块中的一个class方法,但是我在源代码中找不到。

HTMLNokogiri模块的一个class(单例)方法(你说得对,你可以用::代替.)。源代码是 here:

module Nokogiri
  class << self
    ###
    # Parse HTML.  Convenience method for Nokogiri::HTML::Document.parse
    def HTML thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
      Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)
    end
  end

#...

end

您可以使用 Method#source_location 简单地检查您的方法位于何处,例如:

Nokogiri.method(:HTML).source_location
#=> ["/Users/you/.rvm/gems/ruby-2.3.0@gemset/gems/nokogiri-1.6.8.1/lib/nokogiri/html.rb", 14]