今天有点蛋疼的想验证一把 ruby 寻找方法的搜索路径, 例
module M; end
class B; end
class C <B; include M; end
c = C.new
那么 c.send(:to_s) 搜索路径应该是怎么样的呢?
我认为完整的路径为:
c -> c.engienclass -> C -> M -> B ->Object->Kernel
本想 debug 一把,不知道为何下了断点进不去。翻了下代码看了看,觉得怎么略过了 engienclass 和 module,求解?
search_method(VALUE klass, ID id)
{
st_data_t body;
if (!klass) {
return 0;
}
while (!st_lookup(RCLASS_M_TBL(klass), id, &body)) {
klass = RCLASS_SUPER(klass);
if (!klass) {
return 0;
}
}
return (rb_method_entry_t *)body;
}