Project

General

Profile

Actions

Bug #8722

closed

Refinements remain active beyond the end of an evaled string

Added by Anonymous over 10 years ago. Updated over 10 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.1.0dev (2013-08-02 trunk 42320) [x86_64-darwin12.4.0]
[ruby-core:56329]

Description

=begin

The [[RefinementsSpec]] states:

"When main.using is invoked in a string given as the first argument of Kernel#eval, Kernel#instance_eval, or Module#module_eval, the end of the scope is the end of the string."

However, in this example script, String#upcase remains refined even after the call to eval() has finished:

module M
refine String do
def upcase
reverse
end
end
end

puts "hello world".upcase
puts eval(%{using M; "hello world".upcase})
puts "hello world".upcase

I would expect the output of this script to be:

HELLO WORLD
dlrow olleh
HELLO WORLD

Instead it is:

HELLO WORLD
dlrow olleh
dlrow olleh

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0