From: KOSAKI Motohiro Date: 2011-04-21T08:55:09+09:00 Subject: [ruby-dev:43407] Re: [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max) > > Issue #4591 has been reported by Masaya Tarui. > > ---------------------------------------- > Bug #4591: (1.5...2).max #=> 1 (Range#max) > http://redmine.ruby-lang.org/issues/4591 > > Author: Masaya Tarui > Status: Open > Priority: Normal > Assignee: > Category: core > Target version: > ruby -v: ruby 1.9.3dev (2011-04-20 trunk 31311) [i386-mswin32_100] > > 現在、(1.5...2).maxが1になります。 > beginより小さい値が返ってくるのは違和感があります。 > > 終端を含まないRangeについて、endがIntegerである時にend-1を返していますが、 > それはbeginもIntegerである事が想定されてると思います。 > 結局 beginがIntegerじゃないときは、endがIntegerでない時と同様に > maxが定義できなさそうなので、やはり同様にErrorにした方が親切かと思います。 わたしRubyをまったく知らないんですけど、rangeに対するmaxってようするに 1) rangeの範囲に収まる整数値をすべて取り出す 2) その集合に対して、最大の数値を取り出す という操作をしているわけですよね。ここで、(1)で整数値が1つも取り出せなかった (今回のケース)のときにtype errorになるのは納得できるのですが、そうじゃないときも errorにするのが親切なんですかね? end-1がbeginより小さかったらエラー。というロジックだと困ります?endが 非整数値のときの扱いにも同じ疑問があるのですが。