为什么?无法转换为String:我有一个to_s方法!

时间:2011-06-21 16:34:21

标签: ruby

我不明白为什么以下会引发异常:

class X
  def to_s
    "x"
  end
end

s = ""
s << X.new
# --> TypeError: can't convert X into String

毕竟'to_s'应该将X转换为String。

3 个答案:

答案 0 :(得分:8)

Ruby核心不会自动调用短转换;这就是长时间的转换。长转换适用于与转换目标非常相似的内容,而不是仅具有目标类型的表示的内容。

使用:to_str

也就是说,如果您向班级添加def to_str; "x"; end<<表达式将自动转换。

答案 1 :(得分:6)

  

毕竟to_s应该将X转换为String

不,不是。它应该表示它为Stringto_str应该转换它。

答案 2 :(得分:-1)

Ruby中没有自动转换;你必须明确地调用你的方法to_s:

s << X.new.to_s