Ruby 2.0 ????????????
???????????? ???????[ 2014/3/14 13:52:26 ] ????????Ruby ?????? ????
??????????????????????C' ??????′?????????????? C ????????????????????????????????????????????? C.ancestors ??????? C ???????????????????????????? C.ancestors ????ι??????
????????????? Module#ancestors ?????????????????????
VALUE
rb_mod_ancestors(VALUE mod)
{
VALUE p?? ary = rb_ary_new();
for (p = mod; p; p = RCLASS_SUPER(p)) {
if (FL_TEST(p?? FL_SINGLETON))
continue;
if (BUILTIN_TYPE(p) == T_ICLASS) {
rb_ary_push(ary?? RBASIC(p)->klass);
}
else if (p == RCLASS_ORIGIN(p)) {
rb_ary_push(ary?? p);
}
}
return ary;
}
?????ú??????????????????飬?????????????????????????????????????????????????????????????????????檔????????????????????
???????????????????????????C.ancestors ????а? C ???????????????????????????????? origin ???????????? C.ancestors ??????????е? C ????? C ??????????? C ????????????????? C ????????
?????????????????????????????????????????????????Щ?????????????????????????????????????顣???????????????????????????????????????????????????????????????????
A = Module.new
module B
def bar; 'B' end
end
module C
include A?? B
end
class D
include A
prepend C
def bar; 'D' end
end
D.new.bar # => 'D'
?????? D ???????? C ????????????? A??????У???????? D ?????? C ????D ?? C ?????????????????? D ?????? C ???D ??????????
????+---+ +---+ +--------+
????| D |--->| A |--->| Object |
????+---+ +---+ +--------+
????+---+ +---+ +---+ +--------+
????| C |--->| A |--->| B |--->| Object |
????+---+ +---+ +---+ +--------+
????|
????+-----------------+ A ??ò????????? D' ?????
????|
????v
????+---+ +---+ +---+ +---+ +---+ +--------+
????| D |--->| C |--->| D'|--->| A |--->| B |+-->| Object |
????+---+ +---+ +---+ +---+ +---+ +--------+
??????????б????????????? A ???????ò????????? D' ????棬???? B λ?? D' ????檔???? D.new.bar ????? 'D' ?????? 'B'??
?????????????????????????? Ruby ??????????????????÷?????????????????????ι???????????????????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11