dblack wrote: ... > I confess to confusion about the new arg/param semantics. > For example: Me too - but I start seeing some light:-) Here is what I got playing with this stuff (I guess you need a recent cvs version ...) --- module Enumerable def each_one # turn an old style Hash#each # into a new style Hash#each each {|*e| yield *[e] } end def each_many # reverse of the above each {|e| yield *e } end def sum result = 0 each { |e| result += yield e } result end def sum_one result = 0 each_one { |e| result += yield e } result end def sum_many result = 0 each_many { |e| result += yield *e } result end end class << n = Object.new # new style Hash::each include Enumerable def each yield [1,2] yield [3,4] end end class << o = Object.new # old style Hash::each include Enumerable def each yield 1,2 yield 3,4 end end n.sum {|a,b| b } # fine o.sum_one {|a,b| b } # fine o.sum {|a,b| b } # warning o.sum_many {|a,b| b } # warning # n.sum_one {|a,b| b } # Error ... n.sum_many {|a,b| b } # warning --- > > irb(main):005:0> *a = 1,2 > => [1, 2] > irb(main):006:0> *a = [1,2] > => [1, 2] > irb(main):007:0> *a = [[1,2]] > => [[[1, 2]]] > > The one that doesn't seem to occur at all is [[1,2]] -- but > that's what the new Hash#each will give... but aren't block > semantics modeled on assignment semantics? (I'm also still > puzzled about Proc.new {} and proc {} being different from > each other, but I'll settle for understanding |*a| for now :-) I guess I'll settle for understanding the wisdom behind the recent enum.inject {|a,b| break "me" if .. } enum.collect {|a| break "me" if .. } change:-) ------------ /Christoph Please send off list mail to 'my_mail / gmy.net'.gsub(/y/,'x')