我正在使用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'>
)导致我的佣金中止,说堆栈级别太深。
这让我疯了。我在这里缺少什么?
答案 0 :(得分:4)
这不是有效的语法。仅仅因为某些东西出现在IRB中并不意味着它就是它的字面意义。 inspect
方法经常被覆盖,在这种情况下,它被重新映射到自定义内容。
你想要的是:
assert_equal "<Dog named 'Fido'>", fidos_self.inspect
默认情况下,irb
中的任何结果都会通过调用inspect
来显示。