まつもと ゆきひろです

In message "Re: [ruby-dev:29386] String(nil)"
    on Fri, 1 Sep 2006 23:15:01 +0900, Shugo Maeda <shugo / ruby-lang.org> writes:

|まず、議論を簡単にするために、String(nil)の話とnil.to_sの話は分け
|て考えませんか?
|ここでは、String(nil)について考えたいと思います。

まずは簡単な方から。

|Yukihiro Matsumoto wrote:
|> |> というわけで、
|> |>   String(nil)  #=> TypeError
|> |>   Integer(nil) #=> TypeError
|> |>   Float(nl)    #=> TypeError
|> |>   nil.to_s     #=> ""
|> |>   nil.to_i     #=> 0
|> |>   nil.to_f     #=> 0.0

|> |私もこれが一番一貫性があって、かつ便利だと思います。

|「一貫性がある」という表現はよくなかったかもしれません。
|「一貫性があるように見える」というところでしょうか。

まあ、理解できないわけではないです。

|言語を設計する側から見ると一貫性がないように見えるかもしれません
|が、その言語を使ってプログラムを読み書きする立場から見ると、わり
|と一貫性があるように見えるような気がします。
|たぶん、to_iが変換が期待されるかどうか微妙な局面で、とりあえず便
|利そうな値に変換してしまうのに対して、Integerがそういう局面ではエ
|ラーを出すので、Integer以外の他の型への変換でも同様の挙動を期待し
|てしまうのではないかと思います。

Integer()とFloat()は双対ですからそれはそれで良いと思います。
で、String()にもそれを期待するとすると、文字列にとって「変換
が期待されるかどうか微妙な局面」とはどのような局面かまず定義
する必要があると思います。

私は、(nilも含めてすべてのObjectがto_sを持ち、なんらかの文字
列表現を持つので)「微妙な局面」は存在しないと考えています。
ということは、私にとっては

>   String(nil)  #=> TypeError

は「ありえない」感じなんですが、上記案に賛成された方々はどの
ように感じておられるのでしょうか。

|便利なのは、使う時にどちらを選ぶかの基準がわかりやすいところだと
|思います。なるべくエラーにせずに何らかの値に変換してほしい時は
|to_i系を使って、微妙な場合はエラーにしてほしい時はInteger()系を
|使えばいいので。

まあ、そうでしょうね。で、String()には「微妙な場合が存在しな
い」というのが私の考えです。

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