我使用ruby-1.9.3。
当method_missing method
到来时,我试图找出这个方法的定义。
我看一下Ruby Doc,发现该方法是在BasicObject
中定义的,
但是当我在irb中使用BasicObject.methods.grep /^method/
时,它给了我一个没有任何method_missing
方法的结果数组,然后,我尝试Kernel.methods.grep /^method/
,但仍然没有method_missing
方法。
答案 0 :(得分:8)
使用Method#owner
知道在哪个类中定义了哪个方法。
method(:method_missing).owner # => BasicObject
答案 1 :(得分:6)
这是一种私人方法: 尝试:
BasicObject.private_methods.grep /missing/
答案 2 :(得分:2)
如果你想看到来源,你将不得不在C代码(用于MRI)中挖掘,例如使用gem install pry pry-doc
即可
~$ pry
[1] pry(main)> show-source method_missing
From: vm_eval.c (C Method):
Owner: BasicObject
Visibility: private
Number of lines: 7
static VALUE
rb_method_missing(int argc, const VALUE *argv, VALUE obj)
{
rb_thread_t *th = GET_THREAD();
raise_method_missing(th, argc, argv, obj, th->method_missing_reason);
UNREACHABLE;
}
答案 3 :(得分:0)
如果其他人正在阅读一些旧材料并感到困惑,这种方法显然习惯于属于内核模块,直到v1.8.7.330。现在,如上所述,它已被移至BasicObject。