前田です。

In message "[ruby-list:6168] Re: Ruby連載 第3回"
hisanori / sitc.toshiba.co.jp <hisanori / sitc.toshiba.co.jp> wrote:

|0. 名が体を表してない
|
|を除外するとして^^;

まあ、イテレータという名前に関しては歴史的理由(CLUの影響)でこうなって
いるということでよいのではないでしょうか。

|1. 手続きをyieldという名前で参照しなければならない。

これは約束事ですから、イテレータに限らず他のことでも同じですよね。

|2. 複数の手続きを指定する事が出来ない。

Procオブジェクトを使えば可能ですけど、そもそもRubyの場合、複数の手続きを
指定するメソッドはわかりにくくなるのであまり使えないのではないでしょうか。
Smalltalkみたいな仕組みだとdetect:ifNone:みたいにセレクタでブロック
の意味を明確にできますが。

|3. 定義済みの関数を渡す時でも、わざわざブロックにしなければならない。

これをPythonみたいな形で実現するためには、メソッド呼び出しの()を省略
できなくなる、とか、ローカル変数とメソッドの区別が問題になる、など色々
考えなくてはいけないことがあるわけです。
これを言語の機能として実現すると、もはやRubyとは別の言語になってしまう
のではないでしょうか。

ruby-devで提案された(って僕が提案したのですが^^;)bound_methodが実装
されれば、レシーバが束縛されたメソッドオブジェクトを取得できるように
なるので、

def foo
  ...
end
bar(bound_method(:foo))

のようにすれば、ライブラリレベルで似たようなことはできるようになります。
# 結局、どういうことになったのでしたっけ。

-- 
前田 修吾