まつもと ゆきひろです

In message "Re: [ruby-list:40864] Re: Ruby without false or nil"
    on Thu, 9 Jun 2005 05:59:23 +0900, URABE Shyouhei <s-urabe / par.odn.ne.jp> writes:

|>|String#indexがfalseを返したとしても成り立つ議論です。
|>
|>理屈では確かにそうですが、しかし、indexが真偽値を返すという
|>のになにか違和感を感じるのは私だけでは無いと思います。まあ、
|>慣れの問題かもしれませんが。
|
|そうですかねえ? 「部分文字列の有無だけを判定する」というのはようするに真
|偽値を要求するコンテキストなんだと理解したわけですが。
|真偽値がほしいなら真偽値が帰ってきてくれたほうが自然と思いませんか?

String#indexというメソッドの挙動を考えると、やはり欲しいのは
オフセットなのだと思います。真偽値だけが欲しいんだったら
indexという名前にはならないだろうし。ただ、存在しないケース
というのは厳然として存在するのでそれに対してどう対処するか、
と問われたとき

  * 例外を返す
  * オフセットとしてはありえない値を返す

のいずれかになるのではないかと。で、Rubyでは後者を選択してい
るのでは無いかと。かつ、その「ありえない値」がたまたま偽なの
で現在のような使いかたをしている、ということで。

|>ENVは文字列しか値を取りませんから、nilに対する挙動はエラーか
|>削除かどちらかしかないと思います。エラーにして方が良かったか
|>な。
|
|nil.to_str を見ていただくわけには行きませんかね。

ふむ。nil以外ではエラーにしているわけですから、nilだけto_str
を見るというのはあまり一貫性が無いと思います。いっそ、全部を
to_strにする、というのもひとつの選択ですが、使い易さという点
からは全部エラーにした方がよさそうに思います

# 変えるかな。

|個人的には NilClass#to_str を定義することがままあります。

それってどういう使い方なんですか。グローバルな変更は影響が大
きすぎて扱い難くないですか?

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