【问题标题】:Why Array.to_s is not recursive?为什么 Array.to_s 不是递归的?
【发布时间】:2021-08-12 03:41:53
【问题描述】:

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 是否会产生任何不良后果?为什么默认情况下它不以这种方式工作?

【问题讨论】:

    标签: crystal-lang


    【解决方案1】:

    当您对集合进行字符串化时,您需要每个集合项都是自包含的,以便区分一个和另一个。 #inspect 负责这一点,因为它应该以明确的方式对值进行字符串化。

    例如,如果Array#inspect 在项目上使用#to_s["a", "b,c", 'd'].to_s 的结果将是"[a,b,c,d]",您甚至无法判断集合中有多少项目或它们有哪些类型。

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多