Actions
Bug #16977
closedAmbiguous lookup super for refinements
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.3p62 (2019-04-16 revision 67580)
Description
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.
Actions
Like0
Like0Like0Like0