From: Yukihiro Matsumoto Date: 2009-01-04T03:14:43+09:00 Subject: [ruby-dev:37689] Re: [Bug #974] Range#max で終了しないことがある まつもと ゆきひろです In message "Re: [ruby-dev:37688] [Bug #974] Range#max で終了しないことがある" on Sun, 4 Jan 2009 02:05:40 +0900, tadayoshi funaba writes: |以下のようにすると終了しないようです。 | |$ ./ruby -e 'inf=1.0/0; (0...inf).max' 実装としては (b...e)とした場合、eが整数でなければ、bからeまで繰り返して、 最後に繰り返した(かつeに等しくない)値を返す という動作をしています。「...」の場合、最大値はeそのものでは なく、Rangeを繰り返した結果eを越えない最大値なので、確実にわ かる手段は実際に繰り返すことだからですが、その結果、eに無限大 を指定すると終了しないわけ(いや、いつかは終了するのかな)です。 これはある意味、終了しないのが指定した通りの動作であると言え ないこともありません。 終了するべきでないとすると、それに合わせて新たな「仕様」を定 義する必要がありますが、どのような仕様が適切か正直よくわかり ませんね。 * eがFloatかつ無限であればそれを返す(...の定義に反するような) * eがFloatかつ無限であればエラー * その他 うーむ。数に関する知識を利用して、より賢い動作をさせてあげた いものですが。