????????????? while ????? module ??????????ancestors?????????????????? module?????? for ??????? module ???????????? klass ?????????У??????????????????????????? module ???? c ?? c ????????
????????? module ??????????????????????У????? superclass_seen ?????ж????????????????????????????????????????????????????嵽???????????????????????
?????????????????? 31 ?д?????????????? rb_include_class_new ???????鴴?????????????include class???????? c ????????????????????????????????? c ??????????????? rb_include_class_new ????????δ???????????
VALUE
rb_include_class_new(VALUE module?? VALUE super)
{
VALUE klass = class_alloc(T_ICLASS?? rb_cClass);
if (BUILTIN_TYPE(module) == T_ICLASS) {
module = RBASIC(module)->klass;
}
if (!RCLASS_IV_TBL(module)) {
RCLASS_IV_TBL(module) = st_init_numtable();
}
if (!RCLASS_CONST_TBL(module)) {
RCLASS_CONST_TBL(module) = st_init_numtable();
}
RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
RCLASS_CONST_TBL(klass) = RCLASS_CONST_TBL(module);
RCLASS_M_TBL(klass) = RCLASS_M_TBL(RCLASS_ORIGIN(module));
RCLASS_SUPER(klass) = super;
if (RB_TYPE_P(module?? T_ICLASS)) {
RBASIC(klass)->klass = RBASIC(module)->klass;
}
else {
RBASIC(klass)->klass = module;
}
OBJ_INFECT(klass?? module);
OBJ_INFECT(klass?? super);
return (VALUE)klass;
}
?????? 4 ?У?class_alloc ???????????????????????? T_ICLASS ?????????????????Ruby ???????????????????????????е??????????????????????????ж??????????????? klass ?????飬????????????????????
?????? 17 ???и? RCLASS_ORIGIN ??????????????????????????Ruby ????У??ú????????£?
????#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin)
???????????????????????? origin ?????????????????????????????????????????????е???????????????????????????????Ruby ?????????????????????
?????????Щ???????????????????????????????????????????????δ?????????????????????????????????
????A = Module.new
????B = Module.new
????module C
????include A?? B    # Inclusion is done by this line
????end
????????????? C ?? include ????????????? Module#include ???????????????????? append_features ?? included ???????????????????? Module#append_features ?????????
???????????????????飬Ruby ???????????????????????????飬???????????????????????????????????????????????鴴?????????????????? C ?????????С?
????????????????????????Щ????????????????顢????????????????????????????? Refinement ????????????????????????????????????
????????????????????????????????????????????????????????У???????????????????????????