【发布时间】:2017-02-22 03:51:06
【问题描述】:
我有一个类Base,还有两个类Derived 和Derived2 继承自Base。它们每个都定义了一个函数foo。
我还有一个模块Gen,它是prepend-ed 到Base。它也是prepend-ed 到Derived2 但不是Derived。
当我在Derived2 的实例上调用foo 时,结果好像Gen 模块只是prepend-ed 到Base 而不是Derived2。这是预期的行为吗?
这是上述场景的代码:
module Gen
def foo
val = super
'[' + val + ']'
end
end
class Base
prepend Gen
def foo
"from Base"
end
end
class Derived < Base
def foo
val = super
val + "from Derived"
end
end
class Derived2 < Base
prepend Gen
def foo
val = super
val + "from Derived"
end
end
Base.new.foo # => "[from Base]"
Derived.new.foo # => "[from Base]from Derived"
Derived2.new.foo # => "[from Base]from Derived"
我预计上述语句的最后一个输出:
[[from Base]from Derived]
【问题讨论】:
标签: ruby inheritance decorator