> |I discovered the "arity" function in the documentation. What puzzles > |me is the non-intuitive values returned by arity. Why does a block > |with one argument return -2, but a block with two arguments return 2? > Try the REAL one argumented closure. > proc{|a,|...}.arity > The one you've tried was EMULATED one argumented closure. [[1],[2],[3],[4]].collect{|x |x} #=> [[1], [2], [3], [4]] [[1],[2],[3],[4]].collect{|x,|x} #=> [ 1 , 2 , 3 , 4 ] I did not know that. I don't think it's obvious from the word "emulated". I have ruby-man-1.4 and .arity is not documented. The documentation is not in CVS and I don't know where to get the latest. This could be a good topic for the FAQ. def foo(&proc) yield( 1 ) end; foo {|x,y|[x,y]} #=> [1, nil] def foo(&proc) yield([1]) end; foo {|x,y|[x,y]} #=> [1, nil] def foo(&proc) yield [1] end; foo {|x,y|[x,y]} #=> nil The docs say using yield is much like using multiple assignment... a = [1] #=> [1] a #=> [1] a,= [1] #=> [1] a #=> 1 I see now... (i guess this has been discussed previously on this list?) > yield `(' [expr [`,' expr...]]) there's a `)' missing in the docs matju