Ruby Koans:此返回值中的引号在哪里?

时间:2011-11-22 12:11:20

标签: ruby string quotes

我正在研究以下Ruby Koan:

class Dog7
  attr_reader :name

  def initialize(initial_name)
    @name = initial_name
  end

  def get_self
    self
  end

  def to_s
    __
  end

  def inspect
    "<Dog named '#{name}'>"
  end
end

def test_inside_a_method_self_refers_to_the_containing_object
  fido = Dog7.new("Fido")

  fidos_self = fido.get_self
  assert_equal "<Dog named 'Fido'>", fidos_self
end

def test_to_s_provides_a_string_version_of_the_object
  fido = Dog7.new("Fido")
  assert_equal __, fido.to_s
end

第一个assert_equal的前半部分是我要填写的内容。这段代码给出了错误:

<"<Dog named 'Fido'>"> expected but was  <<Dog named 'Fido'>>.

问题是,我坚持如何匹配返回值。它看起来像一个字符串文字返回值,但我不知道如何在不使用引号和/或反斜杠的情况下表达它。我没有尝试过任何工作。

帮助?

3 个答案:

答案 0 :(得分:26)

再盯着它看了一会儿后,我想出了他们上课的地方。将第一个断言更改为“assert_equal fido,fidos_self”使测试通过。我被错误抛出,给出了与inspect方法相同的输出,没有引号。感谢您帮助我完成它。

答案 1 :(得分:1)

test_inside_a_method_self_refers_to_the_containing_object更改为以下作品:

def test_inside_a_method_self_refers_to_the_containing_object
  fido = Dog7.new("Fido")

  fidos_self = fido.get_self
  assert_equal "<Dog named 'Fido'>", fidos_self.inspect # .inspect added.
end


好的,还有更多的空白要填补吗?我有一个答案,但似乎你已经错误地填补了空白。

答案 2 :(得分:0)

该错误是类型对象错误;第一个元素是字符串类型,第二个元素是Dog7类型。解决方案是适当地匹配类型。

检查以下项的返回值:

fidos_self.is_a?(String)
fidos_self.is_a?(Dog7)
fidos.is_a?(Dog7)
fidos_self
fidos