From: Yusuke Endoh Date: 2011-11-01T23:40:20+09:00 Subject: [ruby-dev:44768] Re: [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 ふなばさん、まつもとさん、 お返事ありがとうございます。 2011年11月1日22:46 Tadayoshi Funaba : >> 本気で変える予定があるのなら、特大の非互換になりますので、今のうちに >> 切り捨てたい場合の推奨代替策を決めて ( (x/y).round ですかね?) 、 >> 2.0 から啓蒙しておいたほうがいいと思います。(つまり推奨形式になって >> いない場合に warning を出す) > > それは賛成です。これまでの事を考えるとあまり期待できないですが。 > python2 でやったような事ですが、ruby だと div をつかえってくらいでしょ > う。 なるほど。 「代わりに Integer#div 使え」ということなので、Integer#/ が 呼ばれるたび、もしくは初めて呼ばれた時だけに警告する感じですかね。 >> 個人的には、Integer#// とか別の演算子を導入して、Integer#/ は変えない >> 方が嬉しいです。切り捨てを期待したコードをすごく書いてきた。。。 > > smalltalk では、// が切捨て \\ がそれの対になる余りなっていますが、 > ruby では // は正規表現に被るのでダメだと言われました。どっちにしても > Integer#/ を変える事に意味があるので、それだったら、div と quo をつかい > ましょうで終りですね。後はつかいやすいように div メソッドではなく、div > 演算子を用意するくらいか。 見やすい中置演算子がないことが不満なのかなと思ったのですが、 変えること自体が目的なんですかね。 2011年11月1日23:00 Yukihiro Matsumoto : > また、整数 > が要求されるところではほとんどの場合切り捨てが行われているは > ずなので、実際にはあまり問題にならないことが多いかもしれませ > ん。 x を n の倍数にアラインさせるために x / n * n というイディオムをかなり書いてきてるんですよね。 このイディオムが具体的にどういうときに必要かというと、簡単には 説明しにくいんですが、ええと、タイルを対称的に並べるため個数を 偶数に限定する (x / 2 * 2) とか、10^14 .. 10^14 + 1000000 の 範囲の素数を列挙する (2 段階エラトステネス) とか。 妙な例ですみません。 あと、現状の quo だと、4.quo(2) が Rational になるみたいですが、 整数で済む時は整数になるようにしませんか? -- Yusuke Endoh