Project

General

Profile

Actions

Bug #16242

closed

Refinements method call to failed

Added by osyo (manga osyo) over 2 years ago. Updated about 2 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.7.0
[ruby-core:95242]

Description

Refinements method call to failed with prepend.

No problem

module M
  # Methods that you want to call only within this context
  refine M do
    def refine_method
      "refine_method"
    end
  end
  using M

  def hoge
    # OK: `refine_method` calls the method
    refine_method
  end
end

class X
  include M
end

pp X.new.hoge
# => "refine_method"

Problem

  • If prepend another module, the search for refine_method fails
module OtherM
end

module M
  # Added prepend
  prepend OtherM

  refine M do
    def refine_method
      "refine_method"
    end
  end
  using M

  def hoge
    # Error: `hoge': undefined local variable or method `refine_method' for #<X:0x00007fa05a024390> (NameError)
    refine_method
  end
end

class X
  include M
end

# Error
pp X.new.hoge

Environment

Reproduced in the following environment.

RUBY_VERSION  # => "2.7.0"
RUBY_REVISION # => "02dfa0f16361c498e0f529054b00e3e09730892b"
RUBY_PLATFORM # => "x86_64-darwin17"

You can also confirm that it is reproduced here.
https://wandbox.org/permlink/I6tQesDRntT7JZqB


Related issues

Related to Ruby master - Bug #13446: refinements with prepend for module has strange behaviorClosednobu (Nobuyoshi Nakada)Actions
Actions

Also available in: Atom PDF