From: nobu@... Date: 2014-01-17T08:58:17+00:00 Subject: [ruby-core:59821] [ruby-trunk - Bug #9413] [Closed] Object Metaclass Constants Array doesn't Include Singleton Constant Issue #9413 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset r44628. ---------- eval.c: singleton class constants * eval.c (rb_mod_s_constants): return its own constants for other than Module itself. [ruby-core:59763] [Bug #9413] ---------------------------------------- Bug #9413: Object Metaclass Constants Array doesn't Include Singleton Constant https://bugs.ruby-lang.org/issues/9413#change-44394 * 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: REQUIRED, 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/