Actions
Feature #13109
closed`using` in refinements is required to be physically placed before the refined method call
Description
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).
Actions