Forum: Ruby-core strange Module.new behaviour

Posted by Nobuyoshi Nakada (nobu)
on 2012-12-29 03:47
(Received via mailing list)
Issue #4502 has been updated by nobu (Nobuyoshi Nakada).


With latest version, A.X occurs NameError instead of returning B::X.
----------------------------------------
Bug #4502: strange Module.new behaviour
https://bugs.ruby-lang.org/issues/4502#change-35130

Author: evilbrain (Andy Bogdanov)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]


=begin
First I create a proc:
 p = proc {
   self::X = Class.new
   def self.X
     X.new
   end
 }
Then I create a module:
 A = Module.new(&p)
 puts A.X # => #<A::X:0x9c2e774>
Then I create another module:
 B = Module.new(&p)
 puts B.X # => #<B::X:0x9c39304>
Everything seems to be ok. But after module B was created (({A.X})) 
started to return instances of (({B::X}))
 puts A.X # => #<B::X:0x9c38238>

When (({self::X.new})) is used instead of (({X.new})) everything works 
as expected.

More info can be found here http://www.ruby-forum.com/topic/1275717
=end
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.