`URI` 和 `URI.parse` 的区别
Difference between `URI` and `URI.parse`
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.
其实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
。
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.
其实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
。