Project

General

Profile

Actions

Bug #5914

closed

Calling extend with an anonymous module requires use of parentheses

Added by Spakman (Mark Somerville) almost 13 years ago. Updated over 12 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
2.0.0dev
Backport:
[ruby-core:42189]

Description

=begin

Given Ruby 2.0.0dev, 1.9.3 or 1.8.7 and this code:

class Dude
def initialize
extend Module.new do
def hello
puts "Word!"
end
end
end
end

Dude.new.hello

No warning is given, but it does not behave how I expect and throws a NoMethodError.

However, if parentheses are used on the call to extend, things behave as expected:

class Dude
def initialize
extend(Module.new do
def hello
puts "Word!"
end
end)
end
end

Dude.new.hello
=> Word!

I don't understand what is happening in the first case (without parentheses). Is this a bug or a misunderstanding on my part?

=end


Files

noname (855 Bytes) noname Spakman (Mark Somerville), 01/20/2012 09:29 PM

Updated by funny_falcon (Yura Sokolov) almost 13 years ago

When you call without parentheses, then block do is going to extend
method, but not Module.new

2012/1/20 Mark Somerville

Issue #5914 has been reported by Mark Somerville.


Bug #5914: Calling extend with an anonymous module requires use of
parentheses
https://bugs.ruby-lang.org/issues/5914

Author: Mark Somerville
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: 2.0.0dev

=begin

Given Ruby 2.0.0dev, 1.9.3 or 1.8.7 and this code:

class Dude
def initialize
extend Module.new do
def hello
puts "Word!"
end
end
end
end

Dude.new.hello

No warning is given, but it does not behave how I expect and throws a
NoMethodError.

However, if parentheses are used on the call to extend, things behave as
expected:

class Dude
def initialize
extend(Module.new do
def hello
puts "Word!"
end
end)
end
end

Dude.new.hello
=> Word!

I don't understand what is happening in the first case (without
parentheses). Is this a bug or a misunderstanding on my part?

=end

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

Updated by Spakman (Mark Somerville) almost 13 years ago

On Fri, Jan 20, 2012 at 08:52:08PM +0900, Юрий Соколов wrote:

When you call without parentheses, then block do is going to extend
method, but not Module.new

Doh! That seems so obvious now that you have pointed it out.

Thanks a lot, it was really confusing me!

Actions #3

Updated by ko1 (Koichi Sasada) over 12 years ago

  • Status changed from Open to Rejected
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0