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

rad*_*iel 4 ruby

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

class X
  def to_s
    "x"
  end
end

s = ""
s << X.new
# --> TypeError: can't convert X into String
Run Code Online (Sandbox Code Playgroud)

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

Dig*_*oss 8

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

使用: to_str

也就是说,如果您添加def to_str; "x"; end到您的类,<<表达式将使用自动转换.


Jör*_*tag 6

毕竟to_s应该转换XString.

不,这不对.它应该代表它作为一个String.to_str应该转换它.