Project

General

Profile

Actions

Bug #6838

closed

class_eval and instance_eval do not scope class names the same as direct code

Added by cpoirier (Chris Poirier) over 11 years ago. Updated over 11 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11]
Backport:
[ruby-core:47013]

Description

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0