Project

General

Profile

Actions

Bug #7107

closed

Ruby can no longer find constants in methods in anonymous modules

Added by drbrain (Eric Hodel) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
ruby 2.0.0dev (2012-09-06 trunk 36915) [x86_64-darwin12.1.0]
Backport:
[ruby-core:47834]

Description

=begin
With ruby 1.9 and newer C cannot be found if m is duplicated:

module M
C = 1

def self.m
  C
end

end

puts 'named module'
M.m

puts 'anonymous module'
m = M.dup
m.m

Ruby 1.8:

$ ruby -v t.rb
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
named module
anonymous module

With Ruby 1.9:

$ ruby19 -v t.rb
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
named module
anonymous module
t.rb:5:in m': uninitialized constant Module::C (NameError) from t.rb:14:in '

With trunk:

$ ruby19 -v t.rb 
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
named module
anonymous module
t.rb:5:in `m': uninitialized constant Module::C (NameError)
	from t.rb:14:in `<main>'

(({m::C})) works in all three versions, though.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0