Anonymous class, body defined by Proc.new vs. lambda


#1

Hello,

this is OK for both, Ruby 1.8 and 1.9:
f = Proc.new{}; Class.new(&f)

But why is that valid for Ruby 1.8 only?
f = lambda{}; Class.new(&f)

Ruby 1.9 complains
initialize': wrong number of arguments (1 for 0) (ArgumentError) from ./now.rb:21:innew’
from ./now.rb:21:in `’

Regards
Thomas


#2

On Apr 25, 2009, at 14:20 , Thomas H. wrote:

this is OK for both, Ruby 1.8 and 1.9:
f = Proc.new{}; Class.new(&f)

But why is that valid for Ruby 1.8 only?
f = lambda{}; Class.new(&f)

Ruby 1.9 complains
initialize': wrong number of arguments (1 for 0) (ArgumentError) from ./now.rb:21:innew’
from ./now.rb:21:in `’

the error message tells you why. it isn’t hard to figure out what the
arg is either:

f = lambda{|x| p x }; Class.new(&f)
#Class:0x428ec


#3

Thomas H. wrote:

Ruby 1.9 complains
initialize': wrong number of arguments (1 for 0) (ArgumentError) from ./now.rb:21:innew’
from ./now.rb:21:in `’

Just a guess does this fix it?

f = lambda{|o| }; Class.new(&f)

Something to do with lambdas defend their arity…