From: kakyoin.hierophant@... Date: 2017-10-13T11:32:03+00:00 Subject: [ruby-core:83263] [Ruby trunk Bug#14012] NameError is raised when use class variables in Refinements Issue #14012 has been reported by joker1007 (Tomohiro Hashidate). ---------------------------------------- Bug #14012: NameError is raised when use class variables in Refinements https://bugs.ruby-lang.org/issues/14012 * Author: joker1007 (Tomohiro Hashidate) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Sorry in advance if other ticket exists. In a case, Reference to class variables raises unnatural NameError. A class variable is defined in a module. And include the module in "refine" block. Refined method cannot use the class variable, and raises NameError. Sample. ~~~ ruby module FooMod @@foo_mod1 = 1 def foo_mod1 p self.class.class_variable_get("@@foo_mod1") end end module FooMod2 @@foo_mod2 = 1 def foo_mod2 p self.class.class_variable_get("@@foo_mod2") end end class Foo @@hoge = 1 include FooMod def hoge1 p @@hoge end end module Ext refine Foo do def hoge2 p self.class.class_variable_get("@@hoge") end include FooMod2 end end using Ext Foo.new.hoge1 # => 1 OK Foo.new.hoge2 # => 1 OK Foo.new.foo_mod1 # => 1 OK Foo.new.foo_mod2 # => uninitialized class variable @@foo_mod2 in Foo (NameError) ~~~ Is This behavior Refinements spec? or bug? -- https://bugs.ruby-lang.org/ Unsubscribe: