有没有办法用方法覆盖Ruby的默认字符串插值行为?

时间:2012-03-13 19:46:13

标签: ruby

当在双引号字符串插值中引用对象时,似乎不会调用to_sto_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"的事情吗?

更新

道歉,但这段代码确实有效。另一段代码中的错误。

2 个答案:

答案 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"