2

#parsed_responseHTTParty 的响应对象在被引用时似乎返回。例如:

response = HTTParty.get(some_url)
response                 # => { some: 'random', stuff: 'in here' }
response.parsed_response # => { some: 'random', stuff: 'in here' }

另外,如果您检查response它的类不是哈希而是响应对象

response.class # => HTTParty::Response

这很有用,因为您可以在responselike上检查其他内容,response.code并且非常方便地简单地引用响应来获取parsed_response.

我怎么能在自己的课堂上做这样的事情?但是,我希望它在引用类时返回一个字符串,而不是返回一个哈希值。

这是我想要做的一个具体例子:

not_a_string = MyClass.new('hello', [1, 2, 3])
not_a_string        # => 'hello'
not_a_string.stuff  # => [1, 2, 3]

因此,在 rspec 中,测试应该像这样通过:

not_a_string = MyClass.new('hello', [1, 2, 3])
not_a_string.should == 'hello'  # passes
4

3 回答 3

4

这对你有用吗?

class MyClass < String
  attr_reader :stuff

  def initialize(string, stuff)
    super string
    @stuff = stuff
  end
end

它像这样工作

irb(main):002:0> t = MyClass.new('hello', [1, 2, 3])
=> "hello"
irb(main):003:0> t.stuff
=> [1, 2, 3]
irb(main):004:0> t.class
=> MyClass

-- 编辑:改进的解决方案 --

这更干净

class MyClass < Struct.new(:string, :stuff)
  def ==(other)
    string == other
  end

  def inspect
    string.inspect
  end
end

相同的输出:)

irb(main):002:0> t = MyClass.new('hello', [1, 2, 3])
=> "hello"
irb(main):003:0> t.stuff
=> [1, 2, 3]
irb(main):004:0> t.class
=> MyClass
于 2013-06-25T09:54:40.270 回答
1

inspect出于您的目的,定义and就足够了==

class Test
  def initialize(string)
    @string = string.to_s
  end

  def inspect
    @string.inspect
  end

  def ==(other)
    @string == other
  end
end

t = Test.new 'asd' #=> "asd"
t #=> "asd"
t == 'asd' #=> true
于 2013-06-25T10:06:42.423 回答
0

是的,这是一个很好的功能:)您所要做的就是创建一个检查方法;)这是一个示例:

class Greeter
  def initialize(name)
    @name = name.capitalize
  end

  def salute
    puts "Hello #{@name}!"
  end

  def inspect
    "hey"
  end
end


g = Greeter.new 'world'
g  # hey

干杯!

于 2013-06-25T10:10:41.627 回答