我正在研究ruby koans中的about_classes.rb文件,并用“inside_a_method_self_references_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'>
)导致我的rake中止,说堆栈级别太深。这让我发疯了。我错过了什么?
最佳答案
这不是有效的语法。仅仅因为某些东西在IRB中作为一个特定的东西出现并不意味着它就是字面意义上的东西。inspect
方法经常被重写,在本例中,它被重新映射到某个自定义对象。
你想要的是:
assert_equal "<Dog named 'Fido'>", fidos_self.inspect
默认情况下,
irb
中的任何结果都是通过调用inspect
来显示的。