Issue #13109 has been updated by kernigh (George Koehler).


Feature #13805 proposed to activate refinements across multiple files without an explicit `using` in every file.

----------------------------------------
Feature #13109: `using` in refinements is required to be physically placed before the refined method call
https://bugs.ruby-lang.org/issues/13109#change-66560

* Author: matsuda (Akira Matsuda)
* Status: Rejected
* Priority: Normal
* Assignee: shugo (Shugo Maeda)
* Target version: 
----------------------------------------
When using refinements in one file, the `using` call needs to be physically placed before the refined method call.

For example, this works:

```
using Module.new {
  refine Object do
    def foo() p 'hello'; end
  end
}

class Object
  def bar() foo; end
end

Object.new.bar
```

but this doesn't work:

```
class Object
  def bar() foo; end
end

using Module.new {
  refine Object do
    def foo() p 'hello'; end
  end
}

Object.new.bar

#=> doesnot_work.rb:2:in `bar': undefined local variable or method `foo' for #<Object:0x007f8f2a0251c8> (NameError)
```

I know that current refinements has a unique scope called "file scope", but I don't think this is expected behavior.
At least I expect it to work so far as `using` is evaluated in runtime, no matter where in the file it is.

I confirmed that this reproduces in all stable versions of 2.0, 2.1, 2.2, 2.3, 2.4, and today's trunk (2.5).



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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>