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

时间:2015-03-09 15:23:20

标签: ruby url uri

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 URLParse URL to Get Main DomainExtract Host from URL string

1 个答案:

答案 0 :(得分:4)

实际上,URI(x)URI.parse(x)是相同的。

URIKernel上定义的方法,基本上会调用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

相关问题