From: "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date: 2024-02-26T10:10:24+00:00
Subject: [ruby-core:116946] [Ruby master Bug#20302] Multiple refinements cannot be applied to the same module

Issue #20302 has been reported by mame (Yusuke Endoh).

----------------------------------------
Bug #20302: Multiple refinements cannot be applied to the same module
https://bugs.ruby-lang.org/issues/20302

* Author: mame (Yusuke Endoh)
* Status: Open
* Assignee: shugo (Shugo Maeda)
* ruby -v: ruby 3.4.0dev (2024-02-20T07:17:20Z master a605234bfa) [x86_64-linux]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
If we are using multiple refinements for the Kernel module, it seems that only the last refinement is enabled.
In the following example, we can call `f2` of M2, which is enabled later. but cannot call `f1` of M1.

```ruby
module M1
  refine(Kernel) do
    def f1 = :f1
  end
end

module M2
  refine(Kernel) do
    def f2 = :f2
  end
end

class Foo
  using M1
  using M2

  def test
    p f2 #=> :f2

    p f1 # expected => :f1
         # actual => undefined local variable or method 'f1' for an instance of Foo
  end
end

Foo.new.test
```

Note that if I change `refine(Kernel)` to `refine(Object)`, it works as expected.
So I think there is a problem only when the refinement target is a module.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/