From: Masaya TARUI Date: 2011-04-21T12:41:21+09:00 Subject: [ruby-dev:43409] Re: [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max) 樽家です。 > むらたです。 *snip* > こうしてみると、以下の仕様に一貫性がないように感じます。 > > assert_equal(nil, (2..1).max) > assert_equal(nil, (2.0..1.0).max) > assert_raise(TypeError) { (1.0...2.0).max } > > 次の、tarui さんによる追加は一貫性が無い方に分類できると思います。 > > assert_raise(TypeError) { (1.5...2).max } > assert_raise(TypeError) { (1...1.5).max } > > > Range#max の明確な定義が必要ですよね。 *snip* ここで一貫性がないとされている assert_raise(TypeError) { (1.0...2.0).max } は#974で導入されてます。 で、その時の議論をみると、 matz> * 万人が納得する (万人じゃなくて多くが、でもいいけど) matz> * かつ有用な matz>最大値の唯一の定義は存在しなさそうだ、ということです という理由でエラーにしています。 このときはendがfloatの時だけを問題にしてましたが、 だったらbeginがfloatの時も問題でしょう。 今回のbug報告はこの時の変更に追従して変更すべきだったのを 変更してなかったんではないかというバグ報告として挙げていて、 maxとはどうあるべきかまでは踏み込んでないつもりです。 そういう議論をするならどっちかというと、#4577ですかね。。 -- 樽家昌也(Masaya TARUI) No Tool,No Life.