[ruby-core:60704] [ruby-trunk - Bug #9413] Object Metaclass Constants Array doesn't Include Singleton Constant

From: usa@...
Date: 2014-02-14 05:59:11 UTC
List: ruby-core #60704
Issue #9413 has been updated by Usaku NAKAMURA.

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

backported into ruby_1_9_3 at r44939.

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

* 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: REQUIRED, 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/

In This Thread

Prev Next