Bug #5857
closedno block given with redefined method although block given
Description
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
'
Updated by patrickhno (patrick hanevold) over 12 years ago
See this thread on stack overflow on this issue:
http://stackoverflow.com/questions/8764460/ruby-re-defined-method-with-a-yield-throws-no-block-given
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
- 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
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
- Priority changed from 5 to 3