From: matz@... Date: 2014-08-01T15:17:11+00:00 Subject: [ruby-core:64154] [ruby-trunk - Bug #10103] [Feedback] Unable to refine class with CONSTANT Issue #10103 has been updated by Yukihiro Matsumoto. Status changed from Open to Feedback Constants (and class variables) are not included in refinement modification. Constants still belong to outer class. If we change this, we have to make incompatible change to constant scoping rules. I don't think its wise. But maybe above class variables case should be warned, probably. Matz. ---------------------------------------- Bug #10103: Unable to refine class with CONSTANT https://bugs.ruby-lang.org/issues/10103#change-48158 * Author: Kyle Decot * Status: Feedback * Priority: Normal * Assignee: * Category: core * Target version: current: 2.2.0 * ruby -v: 2.1.1 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- When refining a class (such as `String` in the following example) it is impossible to assign a constant. The constant will get attached to the module containing the refinement instead of the refined class. When inside of a `refine` block constants should get assigned to that class. ~~~ module Foobar refine String do FOO = "BAR" def foobar "foobar" end end end using Foobar puts "".class::FOO # => uninitialized constant String::FOO (NameError) puts "".foobar # => "foobar" ~~~ -- https://bugs.ruby-lang.org/