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方法,但是我在源代码中找不到。
HTML
是Nokogiri
模块的一个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]
我知道 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方法,但是我在源代码中找不到。
HTML
是Nokogiri
模块的一个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]