Issue #5857 has been updated by Nobuyoshi Nakada.

Status changed from Open to Rejected
ruby -v changed from ruby 2.0.0dev (2012-01-07 trunk 34222) [x86_64-darwin11.2.0]  to 1.9 or later

=begin
patrick hanevold wrote:

> Please help me understand if this really is a bug or not. It seems so very like it.

Not a bug.

The yield calls the block passed to the code making the block.
You have to use block argument instead.

 Mod.foo.class.send(:define_method,:yielder) do |&blk|
   blk.call("new hello")
 end

=end

----------------------------------------
Bug #5857: no block given with redefined method although block given
https://bugs.ruby-lang.org/issues/5857

Author: patrick hanevold
Status: Rejected
Priority: High
Assignee: 
Category: core
Target version: 
ruby -v: 1.9 or later


Please help me understand if this really is a bug or not. It seems so very like it.
The second yielder gives a no block given exception on the yield, and I cant see how thats right, and it is called with a code block.

class Foo
  def yielder
    yield "hello"
  end
end

class Mod

  def initialize
    @@foo = Foo.new
  end

  def self.foo
    @@foo
  end

end

worker = Mod.new

Mod.foo.yielder do |hello|
   puts hello
end

Mod.foo.class.send(:define_method,:yielder) do
   yield "new hello"
end

Mod.foo.yielder do |hello|
   puts hello
end

Gives:

hello
test.rb:27:in `block in <main>': no block given (yield) (LocalJumpError)
    from test.rb:30:in `<main>'



-- 
http://redmine.ruby-lang.org