URI和URI.parse之间的区别

nra*_*ako 5 ruby url uri

URI和之间有什么区别URI.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
Run Code Online (Sandbox Code Playgroud)

我在文档中看到的新实例无需检查即可从通用组件URI创建新URI::Generic实例,并且在args中具有默认解析器。

一般建议似乎是URI.parse,我想知道为什么。我想知道是否有使用URI和不使用的陷阱URI.parse。赞赏任何见识。

相关:如何解析URL解析URL以获取主域从URL字符串提取主机

tes*_*ssi 6

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

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

我们可以通过查看方法的源代码URI()来确认这一点:

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
Run Code Online (Sandbox Code Playgroud)

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