【问题标题】:Ruby Koans 202: Why does the correct answer give a syntax error? [closed]Ruby Koans 202:为什么正确答案会给出语法错误? [关闭]
【发布时间】:2012-10-12 15:27:40
【问题描述】:

我正在研究 Ruby Koans 中的 about_classes.rb 文件,并且通过“inside_a_method_self_refers_to_the_containing_object”测试遇到了障碍。代码如下:

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

所以,我试图将assert_equal 的前半部分评估为后半部分 (fidos_self)。当我在 irb 中解决问题时,fidos_self 返回&lt;Dog named 'Fido'&gt;,但我一直收到该答案的语法错误。

我看过这个类似的帖子: Ruby Koans: Where are the quotes in this return value?,但他的解决方案(使用 fido 而不是 &lt;Dog named 'Fido'&gt;)导致我的 rake 中止,说堆栈级别太深。

这让我发疯了。我在这里错过了什么?

【问题讨论】:

  • 发布的 to_s 方法会出现语法错误。

标签: ruby class syntax


【解决方案1】:

这不是有效的语法。仅仅因为某些事物在 IRB 中显示为特定事物并不意味着它就是字面意思。 inspect 方法经常被覆盖,在这种情况下它被重新映射到自定义的东西。

你想要的是:

assert_equal "<Dog named 'Fido'>", fidos_self.inspect

默认情况下,irb 中的任何结果都通过调用 inspect 来呈现。

【讨论】:

  • 我对 irb 不了解。谢谢!
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2016-04-13
  • 2022-06-16
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多