Actions
Bug #11246
closedrefine 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) almost 9 years ago
- Description updated (diff)
Updated by shugo (Shugo Maeda) almost 9 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.bar
Without
using R1 # 3
,C#foo
was called inR2::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?
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
Like0
Like0Like0