2012-01-27 4 views
3

バグレポートPathname#to_str doesn't appear to work anymoreがありました。 to_strをPathnameにすると、たとえば、Dirsystemなどの文字列を使用する場所でPathnameを使用できます。ただし、バグレポートは拒否され、to_strメソッドが意図的に削除されたというコミットメッセージから表示されます。Pathnameが文字列ではないのはなぜですか(またはto_strメソッドをクラスに追加しても問題ありません)。

私はこれを理解していません - PathnameはStringとBackに無駄に変換することができ、Pathnameを使用しないAPIで作業する場合は非常に便利です。

なぜ、to_strがPathnameに適していないのですか。to_strは大丈夫ですか?

+1

良い質問です。 'to_s'と' to_str'の違いについてのこのディスカッション(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/96554)は、特にPathnameを理由として挙げています'to_str'を持つために。 –

答えて

2

ここにan articleはあなたの質問に答えようとしますが、私の意見では、実際には成功しません。同時にPathname#to_str

Exception#to_strを取り除いたとしてもremovedだった - はっきりマッツは「糸状」と「非糸状」クラス間のこの時点で砂の中に線を引くしようとしていました。 Exceptionの変更は意味があります。Exceptionオブジェクトには他の多くの情報(特にスタックトレース)が含まれているため、あなたの言葉を使用するためにExceptionでは "losslessly String to back"に変換できませんその変換。

私は推測することができますが、Matzは同じ理由でPathnameと感じましたが、それはなぜ不明ですか。ある時点でのドキュメンテーション(1.9.3)でさえ、(「コアメソッド」の下で)「これらのメソッドはStringを効果的に操作しています。私が見つけたいくつかの情報源 - @ MarkThomasの引用に加えて - to_strとなるクラスの例として、Hal FultonのRuby Wayからおそらく手がかりを得ています。

私はこれが非常に満足のいく答えではないと思います。あなたが本当に知りたいのであれば、Ruby-Talk or Ruby-Coreで質問しなければならないかもしれません。 Matz [ツイッター](松本幸弘)に聞いてみることもできますが、彼は日本語だけを話すようです。 WycatsJeremy Kemperはもう少し洞察力があるかもしれませんが、かなりアクセス可能なようです。がんばろう!

P.S. This articleには、「技術的な説明to_strと友人」という興味深いセクションがありますが、あなたの質問に答える仕事はこれ以上はありません。

関連する問題