Ambiguous lookup super for refinements
In specification we have the note
Note that super in a method of a refinement invokes the method in the refined class even if there is another refinement which has been activated in the same context.
If we take a look at the example:
module A def foo "foo from A" end end class C def foo "foo from C" end end refinement = Module.new do refine C do include A end end refinement2 = Module.new do refine C do def foo super end end end using refinement using refinement2 puts C.new.foo # => "foo from C"
This works as described in the specification.
However, if we replace
refinement2 in the example with
# the same A, C and refinement definitions here module B def foo super end end refinement2 = Module.new do refine C do include B end end using refinement using refinement2 puts C.new.foo # => "foo from A"
I don’t understand why
include works differently than refining a method directly.
From my point of view, we should get
foo from C in both cases.