Suraj Kurapati wrote::
> $ cat catch.rb 
> b = lambda { throw :foo }
> catch :foo, &b
...
> catch.rb:2:in `catch': wrong number of arguments (1 for 0) (ArgumentError)
> 	from catch.rb:2:in `<main>'

Proc object generated by lambda method is checked argument number
strictly.  The block which passed to catch method is called with one
argument (tag).  Therefore an error is occuered at Proc#call in your
script (Proc#call is called with one argument, but lambda block can't
accept any argument).

Following script are accepted.

b = lambda {|tag| p tag; throw :foo }
catch :foo, &b # accepted

b = proc {throw :foo }
catch :foo, &b # accepted

-- 
// SASADA Koichi at atdot dot net