From: Yukihiro Matsumoto Date: 2007-12-25T01:00:40+09:00 Subject: [ruby-dev:32712] Re: Enumerable can't take multiple parameters まつもと ゆきひろです In message "Re: [ruby-dev:32708] Enumerable can't take multiple parameters" on Mon, 24 Dec 2007 22:25:54 +0900, GOTOU Yuuzou writes: |eachで複数のパラメータをyieldしたときに、Enumerable#colectで、 |先頭の値しか受け取れないようです。 1.8と違って複数の値を渡す挙動が明確になった副作用でしょう。た とえばEnumerable#collectをRubyで定義する時にどのように書くか、 という問題です。現在は module Enumerable def collect result = [] self.each{|x| result.push(yield x)} result end end と等価になるように定義しています。わりと自然ではないでしょう か。これを全部の値を受け取り、yieldに渡すためには module Enumerable def collect result = [] self.each{|*x| result.push(yield *x)} result end end となります。どっちがいいか、ですね。 |この影響で、RSSのテストが失敗しています。 |このケースではREXML::Elemenet#eachを以下のように修正すれば希 |望する動作になりますが、Enumerableの問題なのかeachを実装する |側の問題なのか判断できませんでした。 個人的にはeachは複数の値をyieldすべきではないと考えて上のよ うな定義にしています。が、理論重視派でも意固地になっているわ けでもないので、実用的なメリットがあるのであれば(今ならばま だ)変更することにやぶさかではありません。 まつもと ゆきひろ /:|)