Siena. です。

▼ [ruby-dev:17273] < Yukihiro Matsumoto さん

》|Enumerable のメソッドは、Enumerable としての挙動をとって欲しいです。|クラス単体で見た場合に Enumerable と異なる挙動であった方が自然であっても、|Enumerable であるとみなして扱う時に Range を特別扱いしないとなりません。
》
》こういう発言というのは Enumerable を include しているクラスは Enumerable であるという静的型の発想に基づいていませんか?

そうですね。それにとらわれすぎているかもしれません。
Ruby 的ではないという事ですので、分割案は取り下げます。

》Rubyでは Enumerable は each をベースにした一連のメソッドの実装を追加する単位に過ぎず、「Enumerableであるとみなして扱う」ことを強く想定してはいません。

なるほど。勉強になりました。

すると、自作ライブラリの説明で、「Enumerable な
オブジェクトを受け取って、これこれの動作を行なう」
というように書くのは厳密には正しくないわけですね。
Enumerable である事が規約となりえないという事は、
ユーザに実装を見せずに確実に利用させるためには、
「受け取るオブジェクトのどのメソッドがどういう挙動をとるか」
を前提として説明しておく事が望ましいと理解しました。
もちろん、実際にはそこまで神経質にやる事はないと思います ^^;

---
Siena. <mailto:siena / cr.chiba-u.ac.jp>