Project

General

Profile

Actions

Feature #4605

closed

Random#randとKernel#randでRangeを扱えるように

Added by yayugu (Yuya Yaguchi) almost 13 years ago. Updated almost 13 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-dev:43427]

Description

=begin
Random#randとKernel#randで引数としてRangeを扱えるようにしてほしいです。

Random#randは引数にInteger, Float, Rangeを扱うことができるのに対し、Kernel#rand, Random.randではIntegerしか扱うことができません。

rand 10 #=> 7
rand 7.5 #=> 4
rand 10..20 #=> TypeError: can't convert Range into Integer

Random.rand 10 #=> 8
Random.rand 7.5 #=> 3
Random.rand 10..20 #=> TypeError: can't convert Range into Integer

Random.new.rand 10 #=> 8
Random.new.rand 7.5 #=> 6.258043599450456
Random.new.rand 10..20 #=> 20

Floatの扱いを変更すると互換性に問題がでてしまいますが、
Rangeを扱えるようにすることでは問題は少ないと思われますし
rand(10..20)のように記述できることは便利です。
=end


Files

random.diff (6.44 KB) random.diff sorah patch sorah (Sorah Fukumori), 04/24/2011 10:27 PM

Updated by yayugu (Yuya Yaguchi) almost 13 years ago

=begin
すみません、書式が崩れたので貼り直します

Random#randとKernel#randで引数としてRangeを扱えるようにしてほしいです。

Random#randは引数にInteger, Float, Rangeを扱うことができるのに対し、
Kernel#rand, Random.randではIntegerしか扱うことができません。

rand 10 #=> 7
rand 7.5 #=> 4
rand 10..20 #=> TypeError: can't convert Range into Integer

Random.rand 10 #=> 8
Random.rand 7.5 #=> 3
Random.rand 10..20 #=> TypeError: can't convert Range into Integer

Random.new.rand 10 #=> 8
Random.new.rand 7.5 #=> 6.258043599450456
Random.new.rand 10..20 #=> 20

Floatの扱いを変更すると互換性に問題がでてしまいますが、
Rangeを扱えるようにすることでは問題は少ないと思われますし
rand(10..20)のように記述できることは便利です。
=end

Updated by sorah (Sorah Fukumori) almost 13 years ago

=begin
とりあえずパッチこんな感じでしょうか。

ドキュメントはとりあえずコピペして弄りましたが、英語的な意味で不安なので適切指摘をください。
=end

Updated by mrkn (Kenta Murata) almost 13 years ago

=begin
sora さんとは独立に私も修正案を作りました。参考にしてください。

https://gist.github.com/939556

Random.rand は Random::DEFAULT.rand と同じものに変更してあります。

=end

Updated by mrkn (Kenta Murata) almost 13 years ago

=begin
そういえば [ruby-list:48013] では整数の Range だけなら反対しないと言っていた私ですが、
作った patch では Range に対する処理を Random#rand のものを流用したので
浮動小数点数の Range でも受け付けています。

[ruby-list:48013] で整数にこだわっていた理由は、Kernel#rand に引数を与えると整数を返す仕様を維持したほうが良いと考えたからなんですが、
Range 対応は追加機能なので浮動小数点数を返しても問題にはならないだろうと改めて考え直しました。

=end

Updated by matz (Yukihiro Matsumoto) almost 13 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:43431] [Ruby 1.9 - Feature #4605] Random#randとKernel#randでRangeを扱えるように"
on Sun, 24 Apr 2011 22:48:59 +0900, Kenta Murata writes:

|Issue #4605 has been updated by Kenta Murata.
|
|
|そういえば [ruby-list:48013] では整数の Range だけなら反対しないと言っていた私ですが、
|作った patch では Range に対する処理を Random#rand のものを流用したので
|浮動小数点数の Range でも受け付けています。

コミットしても良いですよ。
=end

Updated by sorah (Sorah Fukumori) almost 13 years ago

  • Status changed from Open to Closed

=begin
r31340 でmrknさんのパッチがコミットされたようなのでcloseします。

また、それに対するrdocを r31341 でコミットしました。
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0