当在双引号字符串插值中引用对象时,似乎不会调用to_s
和to_str
。例如:
# UPDATE: This example actually works as expected. See update below.
class Foo
def to_s
'foo'
end
def to_str
to_s
end
end
"#{Foo.new}" # result: "#<Foo:0x007fb115c512a0>"
我认为我无法做出返回值"foo"
的事情吗?
更新
道歉,但这段代码确实有效。另一段代码中的错误。
答案 0 :(得分:5)
您使用哪个版本的Ruby看到了这些结果?这对我使用Ruby 1.9.2和1.8.6正常工作:
class Foo
def to_s
'hi mom'
end
end
puts "#{Foo.new}"
#=> hi mom
答案 1 :(得分:4)
您没有返回字符串。删除puts
,因为to_s
需要RETURN一个字符串表示,而不是输出它。
注意:此回复基于问题的先前版本,其中to_s
方法的代码为puts "foo"
。