15

例如:

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

摆脱的正确/rubist方法是Net::HTTP什么?即HTTP::Get.new()或只是Get.new()

4

3 回答 3

18

如果你想缩短这些,你可以导入该命名空间:

Net::HTTP.start(...)

include Net
# HTTP.start(...)

当你积极地导入时要小心,因为如果你得意忘形,它可能会在你的班级内引起冲突。

另一种方法是创建别名:

HTTP = Net::HTTP
Get = Net::HTTP::Get

“正确”的方法是把它拼出来,不要太慌张。一个典型的 Ruby 程序会将这种低级行为隐藏在抽象层之下,因此它很少有什么大不了的。

于 2013-06-25T14:29:22.230 回答
6

我希望这个例子能澄清一些事情。

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

确保在使用 import 或 extend 时知道自己在做什么。您最终可能会覆盖您可能不想覆盖的方法。

于 2013-06-25T17:24:14.003 回答
2
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

在你的课上。

于 2014-11-23T21:01:13.620 回答