为什么路径名不被视为字符串(或者何时可以将to_str方法添加到类中)?

时间:2012-01-27 01:13:53

标签: ruby

有一个错误报告Pathname#to_str doesn't appear to work anymore。在Pathname中使用to_str可以让您在使用字符串的任何地方使用Pathname,例如使用Dirsystem等。然而,错误报告被拒绝,并且它从提交消息中显示故意删除了to_str方法。

我不明白这一点 - 路径名可以毫不费力地转换为字符串并返回,当使用不使用路径名的API时,它会非常方便。

那么为什么to_str不适合路径名,何时to_str可以使用?

1 个答案:

答案 0 :(得分:2)

这是an article试图回答你的问题,但在我看来,并没有真正成功。

大约在同一时间Pathname#to_str被移除Exception#to_str也是removed - 显然Matz正试图在“stringlike”和“non”之间画一条线在沙子里-stringlike“类。 Exception更改是有意义的 - 使用您的单词,Exception无法“无损地转换为String并返回”,因为Exception对象包含许多其他信息 - 特别是堆栈跟踪 - 在转换中会丢失。

我只能猜测,但我敢打赌Matz对Pathname有同样的看法,尽管不清楚为什么。甚至在文档(1.9.3)中也说过(在“核心方法”下),“这些方法正在有效地操纵一个字符串,因为这就是所有的路径。”我找到的几个来源 - 除了一个@MarkThomas引用 - 使用Pathname作为to_str 有意义的类的示例,可能采取来自Hal Fulton的 The Ruby Way 的提示。

我想这不是一个非常令人满意的答案。如果你真的想知道你可能要问Ruby-Talk or Ruby-Core。你可以尝试在推特上问Matz(Yukihiro Matsumoto),但他似乎只用日语交谈。 WycatsJeremy Kemper可能会有更多的洞察力,而且看起来很容易获得。祝你好运!

P.S。 This article有一个“to_str和朋友的技术解释”部分,我发现这些部分很有意思,但它在回答您的问题方面没有做得更好。