Issue #9413 has been updated by Yui NARUSE.

Backport changed from 1.9.3: DONE, 2.0.0: DONE, 2.1: REQUIRED to 1.9.3: DONE, 2.0.0: DONE, 2.1: DONE

ruby_2_1 r45124 merged revision(s) 44628.

----------------------------------------
Bug #9413: Object Metaclass Constants Array doesn't Include Singleton Constant
https://bugs.ruby-lang.org/issues/9413#change-45408

* 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: DONE
----------------------------------------
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/