まつもと ゆきひろです

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

|松尾です。

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

複数の手続きが指定できた場合にはそれぞれ名前をつけた方が良い
と思いますが,もともと複数のイテレータブロックは指定できませ
んから,実用上の不自由は無いですね.まあ,流儀として受け入れ
ていただくよりないかと.

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

こちらは「必要に応じて手続きオブジェクト化して使って下さい」
というのを答えとしておきます.検討中のbound methodが採用され
るともうちょっと楽になるかと思います.

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

これも思想の問題ですね.CやPython, Schemeのように関数がオブ
ジェクトである言語の発想に慣れ切っちゃうと不自然さを感じるか
も知れません.Rubyが一番思想的影響を受けているSmalltalkや
Eiffel(やSather)では関数やメソッドはオブジェクトでないので,
現状があるわけですよね.

美しくないと言えば:

4. 現在与えられているイテレータブロックを他のイテレータにそ
   のまま渡すのが面倒

ってのがあります.滅多に発生するもんじゃなくて,イテレータが
再帰する時くらいですが

   def foo(n)
     for item in n
       foo(item) { |x| yield x }
     end
   end

のような場合には,「ああ,ちょっと面倒だなあ」と思う時があり
ます.

   def foo(n)
     for item in n
       foo(item) pass
     end
   end

なんてのはどうだろう,などと一瞬考えましたが,予約語が増える
のは辛いので,採用する気にはちょっとなれませんねえ.

                                まつもと ゆきひろ /:|)