Issue #6838 has been updated by alexeymuranov (Alexey Muranov).


I think constants are searched "half-dynamiclly", as, for example, inheritance hierarchy is searched, but only after the visual "indented" hierarchy.  Is #6810 related?
----------------------------------------
Bug #6838: class_eval and instance_eval do not scope class names the same as direct code
https://bugs.ruby-lang.org/issues/6838#change-28725

Author: cpoirier (Chris Poirier)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11] 


class X
   def self.f()
      puts "::X"
   end
end


class Y
   class X
      def self.f()
         puts "Y::X"
      end
   end
   
   def self.c()
      X.f()
   end
end


Y.class_eval do
   def self.k()
      X.f()
   end
end


Y.c
Y.class_eval { X.f() }
Y.k


====

Y.c outputs "Y::X"
Y.class_eval { X.f() } outputs "::X"
Y.k also outputs "::X"

Similar behaviour happens with instance_eval:

====

class X
   def f()
      puts "::X"
   end
end


class Y
   class X
      def f()
         puts "Y::X"
      end
   end
   
   def c()
      X.new.f()
   end
end


Y.new.c
Y.new.instance_eval { X.new.f() }

====

My expectation is that class_eval and instance_eval should map class names the same as code written directly in the class, as they do with function names.


-- 
http://bugs.ruby-lang.org/