From: Robert Klemme Date: 2008-06-27T23:45:17+09:00 Subject: Re: define_method with block 2008/6/27 Robert Dober : > On Fri, Jun 27, 2008 at 1:21 PM, Leslie Viljoen wrote: >> Hi! >> >> Is there a way that methods defined with define_method can take a block? > Short answers > 1.8 : No > 1.9 : Yes 1.9 is still a bit inconsistent here IMHO: irb(main):001:0> RUBY_VERSION => "1.9.0" irb(main):002:0> class Foo irb(main):003:1> define_method(:bar) do irb(main):004:2* yield 123 irb(main):005:2> end irb(main):006:1> end => # irb(main):007:0> Foo.new.bar {|x| p x} LocalJumpError: no block given (yield) from (irb):4:in `block (1 levels) in ' from (irb):7 from /opt/lib/ruby/1.9.0/irb.rb:149:in `block (2 levels) in eval_input' from /opt/lib/ruby/1.9.0/irb.rb:262:in `signal_status' from /opt/lib/ruby/1.9.0/irb.rb:146:in `block in eval_input' from /opt/lib/ruby/1.9.0/irb.rb:145:in `eval_input' from /opt/lib/ruby/1.9.0/irb.rb:69:in `block in start' from /opt/lib/ruby/1.9.0/irb.rb:68:in `catch' from /opt/lib/ruby/1.9.0/irb.rb:68:in `start' from /opt/bin/irb19:12:in `
' irb(main):008:0> class Foo irb(main):009:1> define_method(:bar) do |&b| irb(main):010:2* b[123] irb(main):011:2> end irb(main):012:1> end => # irb(main):013:0> Foo.new.bar {|x| p x} 123 => 123 irb(main):014:0> Kind regards robert -- use.inject do |as, often| as.you_can - without end