我正在测试这个小型Ruby程序:
require 'net/http'
url = URI.parse('http://www.rubyinside.com/')
response = Net::HTTP.start(url.host, url.port) do |http|
http.get(url.path)
end
content = response.body
我不明白为什么URI.parse
没有前缀Net::
而Net::HTTP.start
拥有它。
Net::
的含义是什么?
答案 0 :(得分:1)
Net
是一个模块(即命名空间),HTTP
是一个类,因此Net::HTTP
您正在访问HTTP
类,该类在{ {1}}模块。
Net
是命名空间解析运算符。有关详细信息,请参阅What is Ruby's double-colon (::) all about?。
正如其他人指出的那样,Net::HTTP
旨在与URI
密切合作,而{{3}}是另一个模块(您可以单独使用它而不使用::
net/http
)。
因此,当您需要require 'uri'
时,它还需要net/http
,这就是您可以在代码中使用uri
访问它的原因。
答案 1 :(得分:0)
为什么URI.parse没有前缀Net ::
Simple Examples说 - 当你执行require 'net/http'
时,那么这也会require ‘uri’
,所以你不需要单独要求它。 {{ 3}}是URI::parse模块的一种方法。请记住URI
和Net
是两个不同的模块。
::
是命名空间/范围解析运算符。因此,要访问模块HTTP
中的Net
类,我们需要使用Net::HTTP
。HTTP
是类Net::HTTP
的方法,这就是调用的原因比如Net::HTTP.start
。
答案 2 :(得分:0)
1) Net :: 表示代码在模块Net(ruby的名称空间)中找到。它可以在文件夹网中找到 2)URI.parse没有前缀Net,因为它不属于Net ::