有什么区别:
module Mod
def here
puts 'child'
end
end
class A
prepend Mod
def here
puts 'parent'
end
end
Run Code Online (Sandbox Code Playgroud)
和
class A
def here
puts 'parent'
end
end
class B < A
def here
puts 'child'
end
end
Run Code Online (Sandbox Code Playgroud)
或者另一种说法:派生一个类与预先设置孩子代码的模块一样?
不它不是。B只能从一个类继承,但Mod可以前置到多个类。如果您要调用superinside B#here,它将始终引用A#here,但在 of 内部Mod#here,它将引用前置的#here任何类的实例方法:Mod
module Mod
def here
super + ' Mod'
end
end
class A
prepend Mod
def here
'A'
end
end
class B
prepend Mod
def here
'B'
end
end
A.new.here
# => 'A Mod'
B.new.here
# => 'B Mod'
Run Code Online (Sandbox Code Playgroud)
和
class A
def here
'A'
end
end
class B
def here
'B'
end
end
class C < A
def here
super + ' C'
end
end
C.new.here
# => 'A C'
class C < B
def here
super + ' C'
end
end
# TypeError: superclass mismatch for class C
Run Code Online (Sandbox Code Playgroud)