为什么 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]"
,您无法判断有多少项目是偶数在集合中或他们有什么类型。
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]"
,您无法判断有多少项目是偶数在集合中或他们有什么类型。