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

17
我正在处理以下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'>>.

问题是,我不知道如何匹配返回值。看起来这是一个字符串字面值返回值,但我不知道如何在不使用引号和/或反斜杠的情况下表示它。无论我尝试什么都不起作用。

能帮忙吗?


这是一个填空教程。其思想是按照原始测试失败,然后填写所需的代码以使其通过。我添加了第一个assert的"<Dog named 'Fido'>"部分。 - nrflaw
3个回答

29
在注视了一段时间之后,我终于明白他们的教训要点。将第一个“assert”改为“assert_equal fido,fidos_self”可以通过测试。错误输出与inspect方法相同,不包括引号,让我感到困惑。感谢你帮助我解决问题。

感谢您的帮助。这个公案并不是最好的。问题是什么意义?我想不出比您的建议更好的了(这个建议我之前没有想到过)。 - codenoob

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


好的,还有其他需要填补的空缺吗?我有一个答案,但似乎你已经填错了一个空缺。


谢谢!那个确实有效。不过在这些下面还有一个单独的测试:def test_inspect_provides_a_more_complete_string_version fido = Dog7.new("Fido") assert_equal "<Dog named 'Fido'>", fido.inspect end - nrflaw

0

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

检查以下函数的返回值:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接