模块URI构造函数说明

时间:2016-01-15 03:46:22

标签: ruby module uri

require "uri"

u = URI.parse("https://www.google.com")  #<URI::HTTPS https://www.google.com>
v = URI("https://www.google.com")        #<URI::HTTPS https://www.google.com>
u == v                                   # => true

URI.parse很容易理解,它会在模块parse上调用 module_function URI

如何在Ruby的上下文中理解URI()?它叫什么方法?或者这是一种语法糖?

1 个答案:

答案 0 :(得分:3)

您的问题的最佳答案是源代码。当您致电URI('http..')

时,会执行以下代码
def URI(uri)
  if uri.is_a?(URI::Generic)
    uri
  elsif uri = String.try_convert(uri)
    URI.parse(uri)
  else
    raise ArgumentError,
      "bad argument (expected URI object or URI string)"
  end
end

正如你可以看到的那样,这个方法允许你传递任何参数,并确保如果参数不是uri或uri的实例,程序将抛出ArgumentError。因此,在我看来,使用URI('...')而非URI.parse('...')进行额外检查的良好做法。

您可以自行查看:github ruby repo mirror