`URI` 和 `URI.parse` 的区别

Difference between `URI` and `URI.parse`

URIURI.parse 有什么区别?这是我得到的:

require 'uri'
x = "http://google.com"
y = URI(x)       # => #<URI::HTTP http://google.com>
z = URI.parse(x) # => #<URI::HTTP http://google.com>
y == z # => true

我在 docs 中看到 URI 的一个新实例未经检查就从通用组件创建了一个新的 URI::Generic 实例,并且它在 args 中有一个默认解析器。

一般推荐好像是URI.parse,不知道为什么。我想知道使用 URI 而不使用 URI.parse 是否有任何陷阱。感谢任何见解。

相关:How to Parse a URL, Parse URL to Get Main Domain, Extract Host from URL string.

其实URI(x)URI.parse(x)是一样的

URI是在Kernel上定义的一个方法,它基本上调用了URI.parse(x).

我们可以通过查看 the source code of the URI() method:

来确认这一点
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

稍后,在您的代码中,ruby 解析器会根据您使用的语法确定您是否真的想要一个名为 URI 的函数或模块 URI