Issue #6078 has been updated by Brian Ford.


There is a case not given above where it may make sense to give the class/module a name based on #inspect output of the containing class. This case is when the containing class is a singleton class:

$ irb
1.9.3p125 :001 > obj = Object.new
 => #<Object:0x00000101147d30> 
1.9.3p125 :002 > class << obj
1.9.3p125 :003?>   class B
1.9.3p125 :004?>     end
1.9.3p125 :005?>   end
 => nil 
1.9.3p125 :006 > obj.singleton_class.name
 => nil 
1.9.3p125 :007 > obj.singleton_class.const_get(:B).name
 => "#<Class:0x00000101142948>::B" 
1.9.3p125 :008 > 

However, note that the singleton class itself has no name, so giving the nested class/module a name like "#<Class:0x00000101142948>::B"  seems wrong.

Thanks,
Brian
----------------------------------------
Bug #6078: The name of a module nested in an anonymous module depends on how it was created
https://bugs.ruby-lang.org/issues/6078

Author: Brian Ford
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin10.8.0]


If a module is nested under an anonymous module, the nested modules name will depend on how the module is created. See below:

$ irb
1.9.3p125 :001 > m = Module.new
 => #<Module:0x000001009e1398> 
1.9.3p125 :002 > n = Module.new
 => #<Module:0x000001009e1ca8> 
1.9.3p125 :003 > m::N = n
 => #<Module:0x000001009e1ca8> 
1.9.3p125 :004 > m.name
 => nil 
1.9.3p125 :005 > n.name
 => nil 
1.9.3p125 :006 > m.constants
 => [:N] 
1.9.3p125 :007 > module m::O
1.9.3p125 :008?>   end
 => nil 
1.9.3p125 :009 > m.constants
 => [:N, :O] 
1.9.3p125 :010 > m::N.name
 => nil 
1.9.3p125 :011 > m::O.name
 => "#<Module:0x000001009e1398>::O" 
1.9.3p125 :012 > m.const_get(:N).name
 => nil 
1.9.3p125 :013 > m.const_get(:O).name
 => "#<Module:0x000001009e1398>::O" 
1.9.3p125 :014 > M = m
 => M 
1.9.3p125 :015 > m::N.name
 => "M::N" 
1.9.3p125 :016 > m::O.name
 => "#<Module:0x000001009e1398>::O"

Thanks,
Brian


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