使用名称空间/模块的Ruby
例如:使用名称空间/模块的Ruby,ruby,class,module,namespaces,net-http,Ruby,Class,Module,Namespaces,Net Http,例如: require 'net/http' uri = URI('http://example.com/some_path?query=string') Net::HTTP.start(uri.host, uri.port) do |http| request = Net::HTTP::Get.new uri response = http.request request # Net::HTTPResponse object end 摆脱Net::HTTP的正确方法是什么?i、
require 'net/http'
uri = URI('http://example.com/some_path?query=string')
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end
摆脱
Net::HTTP
的正确方法是什么?i、 e.HTTP::Get.new()
或只是Get.new()
如果您想缩短这些,您可以只导入该命名空间:
Net::HTTP.start(...)
include Net
# HTTP.start(...)
当您积极导入时要小心,因为如果您得意忘形,可能会导致类内冲突
另一种方法是创建别名:
HTTP = Net::HTTP
Get = Net::HTTP::Get
“正确”的方法是把它说清楚,不要太慌乱。一个典型的Ruby程序会将这种低级行为隐藏在抽象层之下,所以这很少是什么大不了的事。我希望这个例子能澄清问题
module Foo
def foo
"foo"
end
end
class Bar
include Foo
def bar
"bar"
end
end
Bar.new.foo # foo
Bar.new.bar # bar
class Baz
extend Foo
self.def baz
"baz"
end
end
Baz.foo # foo
Baz.baz # baz
确保您知道在使用导入或扩展时正在执行的操作。您可能最终会覆盖一个您可能不想覆盖的方法
require 'net/http'
uri = URI('http://example.com/some_path?query=string')
httpns = Net::HTTP
def get(uri)
httpns::Get.new uri
end
http.start(uri.host, uri.port) do |http|
request = get uri
response = http.request request # Net::HTTPResponse object
end
在您的类中。我不能
包含Net::HTTP
,它会抛出错误:TypeError:错误的参数类型类(预期的模块)
啊,那么我应该删除它<代码>包含只在模块上起作用,但仅仅通过查看用例很难判断这些东西是如何构造的。别名可能更有效。在任何情况下,键入Net::HTTP
都能让你清楚地知道你在做什么,而隐藏这通常是一个坏主意。@sawa不要删除标记Net HTTP
。这是以后在上搜索时需要的。