【问题标题】:Ruby Koans: Where are the quotes in this return value?Ruby Koans:这个返回值中的引号在哪里?
【发布时间】:2012-01-03 19:46:47
【问题描述】:

我正在研究以下 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'>>.

问题是,我被困在如何匹配返回值上。在我看来,它就像一个字符串文字返回值,但我不知道如何在不使用引号和/或反斜杠的情况下表达它。我尝试的任何方法似乎都不起作用。

帮助?

【问题讨论】:

  • 这是一个填空教程。这个想法是使测试失败,然后填写所需的代码以使其通过。我添加了第一个断言的“”部分。

标签: ruby string quotes


【解决方案1】:

在盯着它看了一会儿之后,我再次弄清楚了他们上课的去向。将第一个断言更改为“assert_equal fido,fidos_self”使测试通过。我被错误抛出,输出与检查方法相同,无引号。感谢您帮助我完成它。

【讨论】:

  • 感谢您的帮助。这个公案不是最好的。问题是重点是什么?我想不出比你的建议更好的了(我没有想到。)
【解决方案2】:

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 "&lt;Dog named 'Fido'&gt;", fido.inspect end
【解决方案3】:

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

检查返回值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2014-10-15
    • 2016-10-20
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多