From: nagachika00@... Date: 2014-02-16T16:32:34+00:00 Subject: [ruby-core:60789] [ruby-trunk - Bug #9413] Object Metaclass Constants Array doesn't Include Singleton Constant Issue #9413 has been updated by Tomoyuki Chikanaga. Backport changed from 1.9.3: DONE, 2.0.0: REQUIRED, 2.1: REQUIRED to 1.9.3: DONE, 2.0.0: DONE, 2.1: REQUIRED r44628 was backported to ruby_2_0_0 at r45010. ---------------------------------------- Bug #9413: Object Metaclass Constants Array doesn't Include Singleton Constant https://bugs.ruby-lang.org/issues/9413#change-45204 * Author: Dmitri Moore * Status: Closed * Priority: Normal * Assignee: * Category: core * Target version: current: 2.2.0 * ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0] * Backport: 1.9.3: DONE, 2.0.0: DONE, 2.1: REQUIRED ---------------------------------------- Let's assume we have this Ruby class: class MyClass class << self MC_CONST = 30 end end Then, let's instantiate `MyClass` and add another constant to the object's metaclass: m = MyClass.new class << m OBJ_MC_CONST = 50 end There are no issues with the object singleton constant: m.singleton_class::OBJ_MC_CONST # => 50 <-- [OK] m.singleton_class.constants.include? :OBJ_MC_CONST # => true <- [OK] But not exactly what I'd expect with the class singleton constant: MyClass.singleton_class::MC_CONST # => 30 <-- [OK] MyClass.singleton_class.const_get :MC_CONST # => 30 <-- [OK] MyClass.singleton_class.const_defined? :MC_CONST=> true <-- [OK] MyClass.singleton_class.constants.include? :MC_CONST # => false <-- [Why???] Why does the array returned by `.constants` method on metaclass of `MyClass` class doesn't contain :MC_CONST? Here is the SO (StackOverflow) thread for this http://stackoverflow.com/questions/21057002/where-are-the-ruby-class-singleton-constants-stored/21061117?iemail=1&noredirect=1#21061117 -- http://bugs.ruby-lang.org/