まつもと ゆきひろです

to_strについて改めて考えています。to_strはStringのduck type
を実現するためのhackだと考えるようになりましたので、Stringと
類似のメソッド集合を持たないオブジェクトはto_strを定義するべ
きではないように思います(実害がない限り)。

そこで標準添付ライブラリを探してみたところ、to_strを定義して
いるのは3クラスありました。

optparse.rb: OptionParser::ParseError#to_str

  これはExceptionクラスがto_strを定義していて、上記ルールの
  例外になっていたせいです。1.9ではException#to_strを無くす
  ことにしますので、これを削れるでしょう。ローカルコピーでは
  勝手に削っちゃいました。

pathname.rb: Pathname#to_str

  これはopen()やFile.open()の引数としてPathnameクラスが使え
  るためのhackです。これはKernel#open()がto_openを解釈するよ
  うになれば解決、と思っていたのですが、これではFile.open()
  は救済できませんね。to_path_strのようなメソッドを用意する
  のは...なんとなくイヤだなあ。とはいえ、File.open()も
  to_openを使うというのもやりすぎのような気がします。これは
  ちょっと保留。

csv.rb: CSV::Cell#to_str

  これなんで定義されているんでしょう。不要ではないでしょうか。
  いや、きっと使うから定義したんだと思いますが。できれば削り
  たいです。

その他、あちこちにある(fileutil.rbとか)to_strの明示的な呼び
出しも不要のような気がしますが、チェックをあらかじめ先に行い
たいというのも理解できるので、変更を要請したりはしません。

                                まつもと ゆきひろ /:|)