[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23332] to_str再考

From: matz@... (Yukihiro Matsumoto)
Date: 2004-04-05 15:46:18 UTC
List: ruby-dev #23332
まつもと ゆきひろです

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の明示的な呼び
出しも不要のような気がしますが、チェックをあらかじめ先に行い
たいというのも理解できるので、変更を要請したりはしません。

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

In This Thread

Prev Next