From: matz@... (Yukihiro Matsumoto) Date: 1999-02-05T00:03:49+09:00 Subject: [ruby-list:11909] Re: to_i,to_s の素朴な疑問 まつもと ゆきひろです In message "[ruby-list:11904] to_i,to_s の素朴な疑問" on 99/02/04, HQss_YasuiS/hq_ss@omssv.hq.hitachizosen.co.jp writes: |rubyを使うようになってからの素朴な疑問なのですが、ライブラリの中 |で to_iやto_s がよく出てきますがこれらのメソッドって必要なので |しょうか? むかしは必要なかったのです.Perl同様適当に変換してました.が, それでは型にまつわるバグの発見が遅れる一方ですから,ちゃんと 型を合わせる方法を選ぶようになったのです. オブジェクト指向言語にとって,ある値の型は非常に重要な要素で すから無視する方向にはいかない方が良いのではないだろうかと考 えています. to_s,to_iの代わりにString(),Integer()なんてのも用意しました. String(1) # => "1" Integer("1") # => 1 |ruby> 1+1 |2 | |ruby> 1+'1' |ERR: (eval):0:in `+': String can't be coerced into Fixnum | |ruby> '1'+'1' |"11" | |ruby> '1'+1 |ERR: (eval):0:in `+': failed to convert Fixnum into String | |2番目は、1+'1' =>2 に、4番目は、'1'+1 =>"11"になってほしいのです。 |どうです? エレガントじゃありませんか? ですが, def foo(a) b=a+1 # b = "11" or b = 2 return "x"*b # "x"*11 or "x"*2 end foo("1") # => "xxxxxxxxxxx" foo(1) # => "xx" となるとちょっとまずい気がしません? オブジェクト指向の特長として演算子が同じでも左辺の型によって 動作が違う(動的結合)と,結局右辺の型がなんであるか意識しない と正しい結果が出てくれません.でしたら,正しくないかもしれな い結果でつっ走ってくれるよりは,エラーが出てくれた方が良いだ ろうというのが設計者の判断です. まつもと ゆきひろ /:|)