Ruby Koans 202:为什么正确答案会出现语法错误?

时间:2012-10-12 15:27:40

标签: ruby class syntax

我正在使用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返回<Dog named 'Fido'>,但我一直收到该答案的语法错误。

我看过这个类似的帖子: Ruby Koans: Where are the quotes in this return value?,但是他的解决方案(将fido代替<Dog named 'Fido'>)导致我的佣金中止,说堆栈级别太深。

这让我疯了。我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

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

你想要的是:

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

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