Feature #13109
closed
`using` in refinements is required to be physically placed before the refined method call
Added by matsuda (Akira Matsuda) almost 8 years ago.
Updated about 7 years ago.
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).
Related issues
1 (1 open — 0 closed)
- 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.
- 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.
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
?
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.
Feature #13805 proposed to activate refinements across multiple files without an explicit using
in every file.
- Related to Feature #13805: Make refinement scoping to be like that of constants added
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0