From: pablodherrero@... Date: 2015-02-04T03:56:49+00:00 Subject: [ruby-core:67994] [ruby-trunk - Bug #10818] Extrange behaviour when apliying a refinement inside eval Issue #10818 has been updated by Pablo Herrero. Shugo Maeda wrote: > Pablo Herrero wrote: > > Does it make any difference that the refinement at Seiei's example was already active before the string evaluation?. > > If eval('using M', b) in Seiei's example is changed to eval('x = 1; using M', b), > refinements are activated in the subsequent eval. > It's because b's environment is updated to capture the new local variable x. I follow you there, but I meant the example where he activated the refinement outside the string, and then stored the binding at the global variable. ---------------------------------------- Bug #10818: Extrange behaviour when apliying a refinement inside eval https://bugs.ruby-lang.org/issues/10818#change-51380 * Author: Pablo Herrero * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- When you activate a refinement inside an a string using `eval` with a binding, the refinement is sill active the next time you call `eval` with the same binding. Strangely enough, this will only happen if there is an assignment at the code evaluated the first time. If you delete the assignment everything works as expected. ```ruby module M refine String do def foobar; puts 'foobar'; end end end some_binding = class A; binding; end str1 = <