了解ruby库

时间:2014-01-18 11:45:07

标签: ruby

我正在测试这个小型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::的含义是什么?

3 个答案:

答案 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模块的一种方法。请记住URINet是两个不同的模块。

URI是一个模块。在Net模块Net下已定义了类。

::是命名空间/范围解析运算符。因此,要访问模块HTTP中的Net类,我们需要使用Net::HTTPHTTP是类Net::HTTP的方法,这就是调用的原因比如Net::HTTP.start

答案 2 :(得分:0)

1) Net :: 表示代码在模块Net(ruby的名称空间)中找到。它可以在文件夹网中找到 2)URI.parse没有前缀Net,因为它不属于Net ::