これつぐです。


予想もしてなかったところに影響してびっくりしています。

[ruby-dev:8612] Re: Enumerable and rand
> ごとけんです

> >||IO#each 自体を廃止するんでしょうか。
> >|
> >|ゆうべいろいろ考えたんですが、結論としては size/length だけ
> >|を Enumerable からはずすのが妥当という気がして来ました。
> >
> >なるほど。またまた絶妙な判断ですね。
> 
> ぼくも、size/length のみをはずすと言うまつもとさんの案に賛成
> です。Enumerable#random_get を書いててそう思いました。有限性
> とEnumerableは独立だと考えるからです

でも、ほかの有限性を要求するメソッドは残すんですよね?
このあたりのセンスとか、さじ加減とかがまだわかってないみたいです。
ようやく Enumerable の誤解が解けたかと思っていましたがまだまだのようで……。
奥が深い。

私は今まで Enumerable をもっと制約の多いものだと思いこんでいました。
たとえば「有限も込み」だと思っていたのです。
あえて言い訳すると、
Enumerable であること以上を要求するメソッドがちょっと多過ぎです。
殊に要素が有限であることを要求するメソッドと、
<=> を要求するメソッドがあるのは少し気持ち悪いです。
かと言って

  * 有限かどうか
  * 数え上げられるかどうか
  * 比較できるかどうか

で場合分けしてモジュールを作るのも頭が悪いですね。
うーむ……。

> またIOからEnumerableを外すのにも反対です。これはEnumerableに
> 素敵な変更が将来あった場合にIOへの変更が後手後手になりそうだ
> からです。

厳密であることより簡便であることを優先している(ように見える)現状では、
(そういう意味では Enumerable#rand も間違いではない?)
Enumerable#size/length も IO include Enumerable も
特にいじらなくてもよいのではないか、と思っているんですが、

  * IO/File オブジェクトにとってすべての要素とはなにか。
  * Enumerable のメソッドは必ずすべての要素を参照すべきか。

をどう考えるかによっては、
違う結論になるかもしれません。


# 名前の問題、sample/sampling は?
# 結論: ランダムが前面に出ないのでいまいち。