2012-01-27 36 views
3

有一個錯誤報告Pathname#to_str doesn't appear to work anymore。使用路徑名中的to_str將允許您在任何使用字符串的地方使用路徑名,例如Dir,system等。但是,該錯誤報告被拒絕,並且從提交消息中看出to_str方法被故意刪除。爲什麼Pathname不被視爲一個字符串(或者何時可以向類中添加to_str方法)?

我不明白 - 路徑名可以無損地轉換爲字符串並返回,並且在使用不使用路徑名的API時非常方便。

那麼爲什麼to_str不適合路徑名,什麼時候是to_str好嗎?

+1

好問題。 [to_str和'to_str'之間的區別[本討論](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/96554)具體引用了Pathname作爲原因有'to_str'。 – 2012-01-27 01:42:43

回答

2

這裏的an article試圖回答你的問題,但在我看來,並不真正成功。

大約在同一時間Pathname#to_str被刪除Exception#to_str也是removed - 很明顯,馬茨試圖在此時間之間在「弦狀」類和「非弦狀」類之間畫一條線。 Exception更改是有意義的 - 一個Exception不能用你的話來說「無損地轉換成一個String並返回」,因爲一個Exception對象包含許多其他信息 - 尤其是堆棧跟蹤 - 會丟失該轉換。

我只能猜測,但我敢打賭,馬茨認爲Pathname相同的方式,但它不清楚爲什麼。即使對於文檔(1.9.3)來說(在「核心方法」下),「這些方法正在有效地操縱字符串,因爲這是一條道路。」我發現的幾個來源 - 除了一個@MarkThomas cites - 使用Pathname作爲一個類的示例,其中to_str確實有意義,可能從Hal Fulton的The Ruby Way中得到一個提示。

我想這不是一個非常令人滿意的答案。如果你真的想知道你可能要問Ruby-Talk or Ruby-Core。你可以試着問Matz [在Twitter上](Yukihiro Matsumoto),但他似乎只用日語交談。 WycatsJeremy Kemper可能有一些更深入的瞭解,並且看起來非常容易理解。祝你好運!

P.S. This article有一段「to_str和朋友的技術說明」,我覺得它很有趣,但它並沒有做更好的工作來回答你的問題。

相關問題