これつぐです。


私は「Array#rand/random/shuffle/randomize を組み込みにするか」
にはあまり興味がない(強いて言えば反対)のですが……。


> まつもと ゆきひろです

> ここではまず新参もののshuffleは置いといて話をすると、
> 
>   (1) そのようなメソッドは必要か
>   (2) 名前は
>   (3) どのクラスのメソッドとするか
> 
> という3つの質問があります。(1)は割と根源的なので、あとで話を
> します。(2)についてですが、randでは「乱数を返す」と思われそ
> うなのでやめた方が良さそうです。ごとけんさんの案に従いrandom
> の方が良さそうです。

「rand だと乱数を返すと思われそう」というのはわかるんですが、
なぜ「random だとそう思われない」のでしょうか?
rand は random の省略だと思っていたのですが、
もしかしてそうではない!?
いや、そうですよね……?
だとすると、rand を嫌って random というのは中途半端だと思います。
(かと言っていいのは思いつかない。random_pop とか……?)


> (3)ですが、randomeの定義
> 
>         array[rand(array.size)]
> 
> を見ても分かる通り、このメソッドはeachだけでは定義できません。
> ですから、Enumerableに含まれる第1要件を満たしていません。ま
> た、sortのように「内部的に配列に変換してsort」のような処理が
> それなりに嬉しい局面も少なそうです。よってArrayに定義するこ
> とを推します。

each で出来ないのはそのとおりなんですが、
結果的に Enumerable なクラスでは同じ程度には有用なので、
どうせ Range や Array で定義するんだったら、
Enumerable でやってしまったほうがいいという考え方もできませんか?



うーん、でもやっぱり組み込みにするなら、
rand(enumerable) が妥当だと思うのです。
(↑enumerable の要素一つをランダムに得る)