From: "Yugui (Yuki Sonoda)" Date: 2009-01-07T19:39:55+09:00 Subject: [ruby-dev:37720] Re: [Bug #974] Range#max で終了しないことがある Yuguiです。 On 1/5/09 6:38 AM, Yukihiro Matsumoto wrote: > eがNumericでIntegerでない時、...のmaxはエラーにすることにし > ました。末尾を含まない最大値が定義できないので。 当面これをエラーにすることには賛成ですが、理由が違うと思います。 先頭sと末尾eで定義されるところの{n <- N | s <= n < e} なる集合に最大値が 存在することはまったく問題ないわけです。 問題は、上に開いた区間の最大値を定義するために適切な距離関数を与えねばな らないところ、両端が整数であればsuccの"移動距離"で定まる離散的な距離を与 えてやるのが適切であると推測されるのに対して、整数と非整数の組み合わせで はそれが曖昧だと言うことです。 この曖昧さに対して、浮動小数点同士の開いた範囲の場合に倣って例外を発生す ることは当面適切だと思います。しかしながら、将来的にsuccに似たメソッドを シンボルで指定してやる形式は検討の余地があるかと思いました。 Class Float def step_0_5 self + 0.5 end end (1.0...3.0).max(:step_0_5) #=> 2.5 この検討の是非はともかく、この変更の理由については明確にしておく必要があ ると思いましてpostしました。 なお、バグとは言いづらいので、時期的な問題からこの変更は1.9.1には取り込 みません。 -- Yugui http://yugui.jp 私は私をDumpする