[问题] 有关混合继承的顺序问题

楼主: timeregorge (Nick)   2014-05-20 23:10:51
大家好,小弟我又读到不懂的地方了,目前在类别继承和模组混和的部分
以下是程式码
module Walkable
def walk
"i'm walking."
end
end
module Swimmable
def swim
"i'm swimming."
end
end
module Climbable
def climb
"i'm climbing."
end
end
class Animal
include Walkable
def speak
"i'm an animal, and i speak!"
end
end
class GoodDog < Animal
include Swimmable
include Climbable
end
puts GoodDog.ancestors
结果为
Climbable
Swimmable
Animal
Walkable
Object
Kernel
BasicObject
我所读的部分有提到
因为混入的部分有包含和method相同的名称所以会首先找
最后一行,但上面我看不出哪边有相同命名的地方!
请大家帮我解释一下,万分感谢!
作者: mars90226 (火星人)   2014-05-21 00:00:00
每次include一个module时,module就会被加进ancestors
作者: mars90226 (火星人)   2014-05-21 00:01:00
你说的部分是指如果出现同名method,则从ancestors往上
作者: mars90226 (火星人)   2014-05-21 00:02:00
找,越晚加入的ancestor的method越先使用
作者: mars90226 (火星人)   2014-05-21 00:03:00
你目前是印ancestors,所以当然就是照着include顺序的反过来就是了
作者: mars90226 (火星人)   2014-05-21 10:46:00
不,不管什么method,都是从下往上找
作者: mars90226 (火星人)   2014-05-21 10:48:00
你的问题是ancestors顺序吗? 这个顺序是从下往上没错
作者: putumaxally (putumaxally)   2014-06-01 00:24:00
我也没有看到有相同名称的 method, 这个例子举的不好这是哪里的范例??
作者: lTERRAl (卧龙光线 \|/ \|/)   2014-06-07 01:56:00
混合继承的状况 其实不用想的这么复杂由于ruby不让你实际做多重继承 (看看精美的C++...friend)多重继承带来非常多混乱的问题 尤其大家都是friend...所以ruby改用 composition 的方式来做成相同效果先写成module再挂进class 好处是永远只处理单一线父子关系坏处就是每当想要挂多个模组 就必须写出多个module来挂

Links booklink

Contact Us: admin [ a t ] ucptt.com