From: matz@... (Yukihiro Matsumoto) Date: 1998-02-03T12:54:56+09:00 Subject: [ruby-list:6196] Re: Ruby連載 第3回 まつもと ゆきひろです In message "[ruby-list:6168] Re: Ruby連載 第3回" on 98/02/02, 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 なんてのはどうだろう,などと一瞬考えましたが,予約語が増える のは辛いので,採用する気にはちょっとなれませんねえ. まつもと ゆきひろ /:|)