[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:3489

From: "pypypy567 (py _)" <redmine@r...>
Date: Sun, 3 Feb 2013 22:43:27 +0900
Subject: [ruby-reference-manual:3489] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない


Issue #7769 has been updated by pypypy567 (py _).

File rand_srand.patch added

結局分けないで書いてみました。
気の向くままに直してたらあんまり原型をとどめなくなりました。
パッチの内容は Kernel.#{rand, srand}, Random.{rand, srand}, Random#rand の修正と Random::DEFAULT の追加です。


まず上記メソッドの関係を確認しておきます。
Random クラスは 1.9.2 から入ったようです。
1.9.2 では Kernel.#{rand, srand} と Random.{rand, srand} は C レベルでは同じ関数を呼んでいて完全に同等です。
1.9.3 では Random.rand の実体が random_s_rand に変わっていますが srand はそのままで、つまり乱数生成器の実体は同一ということだと思います。
random_s_rand の定義の中では random_rand を呼んでいて、つまり機能は Random#rand と同じです。
2.0.0 はコードは多少修正されているようですが機能は変わっていない気がします。


修正中に気付いたことのメモが有るのでまとめておきます。
多分完全ではありません。

* Kernel.#rand と Random.rand が Range を受け付けるようになったのは 1.9.3 からです。
* 1.9.3 で定数 Random::DEFAULT が追加されています。
* @see を足したり引いたり。
* Range の件以外にも細かい間違いがいろいろありました。
  例えば Random#rand の arg には実数も指定出来ます。
  正直ソースは追い切れないので新たに埋め込んだ間違いも有るかもしれませんが多分元よりは減ってるんじゃないかと。
* 完全に同等な部分については積極的に説明の重複を排除すべきだと思います。
  修正が必要になった時に片方だけ直し忘れたりするので。
  具体的には主に Random.{rand, srand} のことです。
* サンプルコードなど、似た部分は同じように書いて違うところだけ強調するのがいいと思いました。
* to_int による変換などは通常使用するべきでない裏仕様のようなもので、メインの説明からは分離すべきな気がします。
  何も書かないのも罠になりそうなので後から補足する程度でいいんじゃないかと。
  @param には書かなくてもいい気がします。
* Kernel.#srand 内に有るコメントですが、詳しく調べてませんがとりあえず #@until 1.8.6 のようなのでそう書いておきました。
  消してしまってもよさそうですが。
* Random#rand の @raise ArgumentError は不要ではないかと思います。
  これについては別にチケットを作りました。(Bug #7776)

----------------------------------------
Bug #7769: Kernel.#rand に Rangeオブジェクト の説明がない
https://bugs.ruby-lang.org/issues/7769#change-35808

Author: znz (Kazuhiro NISHIYAMA)
Status: Open
Priority: Normal
Assignee: 
Category: doc
Target version: 
reporter: 
ruby_version: 


http://doc.ruby-lang.org/ja/1.9.3/method/Random/i/rand.html には引数に Rangeオブジェクト を指定した時の説明があるのに、
http://doc.ruby-lang.org/ja/1.9.3/method/Kernel/m/rand.html には記述がありません。


-- 
http://bugs.ruby-lang.org/

--
ML: ruby-reference-manual@m...
Info: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      3485 2013-02-01 15:44 [redmine@r...        ] [るりまプロジェクト - Bug #7769][Open] Kernel.#rand に Rangeオブジェクト の説明がない
      3486 2013-02-01 15:46 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
      3487 2013-02-02 10:44 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
->    3489 2013-02-03 14:43 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
      3494 2013-02-05 01:02 ┃┗[kouyataifu4@g...    ]                                     
      3495 2013-02-05 11:18 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
      3497 2013-02-06 12:36 ┃┗[kouyataifu4@g...    ]                                     
      3499 2013-02-07 10:48 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
      3501 2013-02-08 06:04 ┃┗[kouyataifu4@g...    ]                                     
      3503 2013-02-08 11:58 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7769] Kernel.#rand に Rangeオブジェクト の説明がない
      3509 2013-02-09 10:39 ┃┗[kouyataifu4@g...    ]                                     
      3510 2013-02-09 11:28 ┗[redmine@r...        ] [るりまプロジェクト - Bug #7769][Closed] Kernel.#rand に Rangeオブジェクト の説明がない