Project

General

Profile

Actions

Bug #5857

closed

no block given with redefined method although block given

Added by patrickhno (patrick hanevold) over 12 years ago. Updated over 12 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
1.9 or later
Backport:
[ruby-core:41952]

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 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
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0