From: Daniel Brockman Date: 2005-07-15T10:44:07+09:00 Subject: Re: Difference between Class.new and class "Robert Klemme" writes: > There is no equivalent (yet) for "def foo(&b) b.call(1) end" with > define_method, because you cannot do define_method(:foo) {|&b| > b.call(1)}. As Florian Frank pointed out, this is fixed in Ruby 1.9. > Also, you cannot have default values for method arguments > with [define_method]. I just wanted to point out that this is not a show-stopping problem. In Ruby 1.9, `define_method' can do everything `def' can. def foo(bar, baz = QUUX, *rest) ... end can be written as define_method :foo do |bar, *rest| baz = rest.empty? and QUUX or rest.shift ... end For longer parameter lists, you could refactor a bit: class Array def shift_or default if empty? then default else shift end end end define_method :foo do |bar, *rest| baz1 = rest.shift_or QUUX1 baz2 = rest.shift_or QUUX2 baz3 = rest.shift_or QUUX3 ... end But of course, you already know this. As I said, I just wanted to point out that `def' and `define_method' are essentially equal in power as of Ruby 1.9. -- Daniel Brockman So really, we all have to ask ourselves: Am I waiting for RMS to do this? --TTN.