Joe*_*e V 0 ruby overriding module mixins
给定A类和模块B,混合B的实例方法,使其覆盖A的相应实例方法.
module B
def method1
"B\#method1"
end
def method2
"B\#method2"
end
end
class A
def method1
"A\#method1"
end
def method2
"A\#method2"
end
# include B does not override instance methods!
# (module gets mixed into the superclass)
end
puts A.new.method1 # want it to print out "B#method1"
puts A.new.method2 # want it to print out "B#method2"Run Code Online (Sandbox Code Playgroud)
Module#include插入模块M作为一个超类的类C.所以,你不能覆盖C的方法M,而是反过来:C方法覆盖M的方法.(从技术上讲,Ruby没有做M的超类C,而是创建了一个无形的包括类 ?M??,其方法表和常数表点M的方法表和常数表,并使得该类别的父类,但这种区别并不重要这个特殊的问题.)
在Ruby 2.0,有一个新的方法,Module#prepend其中,正如其名称所暗示,预先考虑 M到C的祖先,换句话说,使得M一个子类的C.
所以,简而言之:你不能,至少还没有.
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |