我的印象是,改进不属于Ruby的常规继承方案;覆盖精化中的方法替换了使用细化的所有代码的原始方法。
但是,然后,我尝试使用super
进行此实验,并且似乎调用了重写方法:
class MyClass
def my_instance_method
puts "MyClass#my_instance_method"
end
end
module MyRefinement
refine(MyClass) do
def my_instance_method
puts "MyClass#my_instance_method in MyRefinement"
super
end
end
end
using MyRefinement
MyClass.new.my_instance_method
以上代码输出:
MyClass#my_instance_method in MyRefinement
MyClass#my_instance_method
我的问题是,怎么样?是否以某种方式将细化插入到类层次结构中?
答案 0 :(得分:2)
基于documentation,对细化内置行为的方法查找与您观察到的相同。
您的假设是正确的,它不是典型的继承,可以通过调用superclass
来看到
class C
def foo
puts "C#foo"
end
end
module M
refine C do
def foo
puts "C#foo in M"
puts "class: #{self.class}"
puts "superclass: #{self.class.superclass}"
super
end
end
end
using M
x = C.new
x.foo
输出:
C#foo in M
class: C
superclass: Object
C#foo