为什么 Array.to_s 不是递归的?

Why Array.to_s is not recursive?

Array.to_s 在其内容上使用 inspect,而不是递归调用 to_s

这个代码

class Some
  def to_s; "some" end
end

puts [Some.new].to_s

会产生 [#<Some:0x10078ce80>],而不是 [some]

想知道如果我重写 Array.to_s 以递归地使用 to_s 是否会产生任何不良后果?为什么默认情况下它不以这种方式工作?

当您对集合进行字符串化时,您需要每个集合项都是独立的,以便区分一个和另一个。 #inspect 会处理这个问题,因为它应该以明确的方式对值进行字符串化。

例如,如果 Array#inspect 在项目上使用 #to_s,则 ["a", "b,c", 'd'].to_s 的结果将是 "[a,b,c,d]",您无法判断有多少项目是偶数在集合中或他们有什么类型。