Project

General

Profile

Feature #13109

`using` in refinements is required to be physically placed before the refined method call

Added by matsuda (Akira Matsuda) over 2 years ago. Updated almost 2 years ago.

Status:
Rejected
Priority:
Normal
Target version:
-
[ruby-core:78988]

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

Related to Ruby master - Feature #13805: Make refinement scoping to be like that of constantsOpenActions

History

Updated by matz (Yukihiro Matsumoto) over 2 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 2 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) almost 2 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) almost 2 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) almost 2 years ago

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

#6

Updated by duerst (Martin Dürst) almost 2 years ago

  • Related to Feature #13805: Make refinement scoping to be like that of constants added

Also available in: Atom PDF