我不明白为什么以下会引发异常:
class X
def to_s
"x"
end
end
s = ""
s << X.new
# --> TypeError: can't convert X into String
毕竟'to_s'应该将X转换为String。
答案 0 :(得分:8)
Ruby核心不会自动调用短转换;这就是长时间的转换。长转换适用于与转换目标非常相似的内容,而不是仅具有目标类型的表示的内容。
使用:to_str
也就是说,如果您向班级添加def to_str; "x"; end
,<<
表达式将自动转换。
答案 1 :(得分:6)
毕竟
to_s
应该将X
转换为String
。
不,不是。它应该表示它为String
。 to_str
应该转换它。
答案 2 :(得分:-1)
Ruby中没有自动转换;你必须明确地调用你的方法to_s:
s << X.new.to_s