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
我在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。
答案 0 :(得分:4)
实际上,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
。