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).
Updated by matz (Yukihiro Matsumoto) almost 8 years ago
- Tracker changed from Bug to Feature
I consider it's an intended behavior, but there's a room for improvement.
So I made this issue as a feature request.
Matz.
Updated by matz (Yukihiro Matsumoto) over 7 years ago
- Status changed from Open to Rejected
There may be an idea to use refinement without explicit using
. But that's out of the scope of this issue.
Matz.
Updated by razum2um (Vlad Bokov) about 7 years ago
matz (Yukihiro Matsumoto) wrote:
There may be an idea to use refinement without explicit
using
. But that's out of the scope of this issue.Matz.
Very interesting, @matz (Yukihiro Matsumoto), please, could you refer to the issue of non-explicit using
?
Updated by duerst (Martin Dürst) about 7 years ago
razum2um (Vlad Bokov) wrote:
matz (Yukihiro Matsumoto) wrote:
There may be an idea to use refinement without explicit
using
. But that's out of the scope of this issue.
Matz.
Very interesting, @matz (Yukihiro Matsumoto), please, could you refer to the issue of non-explicit
using
?
I don't think Matz meant a specific already existing issue. I think it should be proposed as a new, separate issue.
Updated by kernigh (George Koehler) about 7 years ago
Feature #13805 proposed to activate refinements across multiple files without an explicit using
in every file.
Updated by duerst (Martin Dürst) about 7 years ago
- Related to Feature #13805: Make refinement scoping to be like that of constants added