From: Yukihiro Matsumoto Date: 2009-01-08T00:50:26+09:00 Subject: [ruby-dev:37727] Re: [Bug #974] Range#max で終了しないことがある まつもと ゆきひろです In message "Re: [ruby-dev:37720] Re: [Bug #974] Range#max で終了しないことがある" on Wed, 7 Jan 2009 19:39:55 +0900, "Yugui (Yuki Sonoda)" writes: |> eがNumericでIntegerでない時、...のmaxはエラーにすることにし |> ました。末尾を含まない最大値が定義できないので。 | |当面これをエラーにすることには賛成ですが、理由が違うと思います。 | |先頭sと末尾eで定義されるところの{n <- N | s <= n < e} なる集合に最大値が |存在することはまったく問題ないわけです。 |問題は、上に開いた区間の最大値を定義するために適切な距離関数を与えねばな |らないところ、両端が整数であればsuccの"移動距離"で定まる離散的な距離を与 |えてやるのが適切であると推測されるのに対して、整数と非整数の組み合わせで |はそれが曖昧だと言うことです。 「定義できない」という用語の使い方が不適切だったのかもしれま せん。言いたかったのは、範囲[a,b)について、bが浮動小数点数で あった場合、 * 万人が納得する (万人じゃなくて多くが、でもいいけど) * かつ有用な 最大値の唯一の定義は存在しなさそうだ、ということです。「シン ボルで指定する」というYuguiさんの提案は「唯一がなければ指定 してやればいいじゃないか」ということなのだと思いますが、それ であればブロックを指定すればよいような(現状はブロックを指定 しても始点がFloatだと動きませんが)。 |なお、バグとは言いづらいので、時期的な問題からこの変更は1.9.1には取り込 |みません。 これについては同意します。 まつもと ゆきひろ /:|)