From: "NAKAMURA, Hiroshi" Date: 2007-06-12T14:48:41+09:00 Subject: [ruby-dev:30960] Re: Random -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Tanaka Akira wrote: >> 実装はあとでどうとでもなるので、akrさんにインターフェースを決めていただ >> きたいところ。思わずrandから移行したくなるような奴をお願いします。 > > rand の 4文字という短さには勝てないって... と言いつつありがとうございます。 クラス構成について: > まず気がつくのは Random じゃなくて Random::MT ということです。 > これと別のデザインとしては、Random 自体を Mersenne Twister > のクラスにするというものがあるでしょう。 > > おそらくまつもとさんは後者を考えているんじゃないですかね。 同感です。以下の説明にも同意。内部実装はともかく、Random::MTは外に出さな い方向でしょうね。 メソッド名について: > Random::MT の中については upto という名前が気になります。 > upto(10) ならやっぱり 10 までだと思うのですが、ここでは 9 ま > でなので名前がよろしくないと思います。すぐに思い付くメソッド > 名としては integer があげられるでしょうか。 同感。JavaではnextBoolean、nextBytes、nextFloat、nextGaussian、nextInt、 nextLongがあります。「next」というのがpseudoな感じを表してますが、 SecureRandomにも同じインターフェースを持たせたいと思っているので、不要で しょう。また、boolean、gaussianは利用者いない。Longは適合せず、というこ とで、 Random#integer(max) Ramdom#bytes(size) Random#float くらい? 他に現行APIからの移行先に; Random#rand(max = 0) Random#srand(seed = nil) Random#seed=(seed = nil) # srandと同じ Random.rand(max = 0) # 現行srand()と同等の種を元にしたRandomオブジェクト # のRandom#rand(max)を呼ぶ。 rand(max = nil) # => Random.rand floatは不要かなぁ。rand(0)と同じ仕様のつもりですが、rand()でいいじゃん、 という気がする。 srand()は廃止とかまずいですかね? せめて、srand()は引数を取らないようにし たい。 > あとは追加メソッドを検討すると OpenSSL::Random や > SecureRandom から random_bytes, hex, base64 が考えられますが、 > そういうのがあると cookie に使いやすくなるのでむしろないほう > がいいという気がします。 こちらの返信は保留。 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) iQEVAwUBRm4zcB9L2jg5EEGlAQJGTQgAnuTY/+GQYvwZrMOwr81CrOd/1ypufV3H 5Bdmrmot1H5yBr6XeK+uPl0/mwWLdNMbOCZ0cI6eXcNKX2Caa4ElTSArYhuB2JPs TysEK8xuVNC9EnpP951ehu9OqXK/aXyO4g6GwxwPp0ZRyVsHWmC71KV/2SIYBpJw mZEg0wjb8OmLk3Q/QnGTV07FQ8Npt19xQlzpPfWPoF7F2h8JiV1TnPfJu1+3Su5i NkHscZqn1/8AbtXcHcfnRn/5NkLUcMIKGouX+Dzk2QvdMunneLK3W1jQn5dWf0OF 7ZMMovptsxftNn+baoyvo8eC6wJG33PNt8V8nbCYscI9CdM5vPMVog== =hLYk -----END PGP SIGNATURE-----