Actions
Bug #11246
closedrefine block doesn't respect "lexical" refinement information
Bug #11246:
refine block doesn't respect "lexical" refinement information
Description
The following program making two refinements refine class C.
class C
def foo
p C
end
end
module R1
refine C do
def foo
p R1
super
end
end
end
using R1 # 1
module R2
using R1 # 2
refine C do
# using R1 # 3
def bar
C.new.foo
end
end
end
using R2
C.new.bar
Without using R1 # 3, C#foo was called in R2::C#bar.
By using R1 #1 and #2, we declared that this lexical scope should use R1. However, it seems that this declaration is ignored.
Is it an intentional behavior?
Updated by ko1 (Koichi Sasada) over 10 years ago
- Description updated (diff)
Updated by shugo (Shugo Maeda) over 10 years ago
- Status changed from Open to Rejected
Koichi Sasada wrote:
The following program making two refinements refine class C.
class C def foo p C end end module R1 refine C do def foo p R1 super end end end using R1 # 1 module R2 using R1 # 2 refine C do # using R1 # 3 def bar C.new.foo end end end using R2 C.new.barWithout
using R1 # 3,C#foowas called inR2::C#bar.By
using R1 #1and#2, we declared that this lexical scope should use R1. However, it seems that this declaration is ignored.Is it an intentional behavior?
It's intentional.
In refine blocks of a module X, all refinements defined in X are activated, and other refinements previously activated are deactivated.
Actions