2015-09-02 35 views
-1

當你打電話時method_missing與第一個參數爲'string'代替:symbol你得到這個神祕的錯誤消息:當你看source code的method_missing的如果錯誤信息引發ArgumentError:沒有給定id來自調用method_missing的

BasicObject.send(:method_missing, 'any-method') 
ArgumentError: no id given 
from (pry):3:in `method_missing' 

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; 
} 

沒有錯誤信息ArgumentError: no id given。 它來自哪裏?

回答

2

raise_method_missing()確實提出了這樣的說法錯誤:

static void 
raise_method_missing(rb_thread_t *th, int argc, const VALUE *argv, VALUE obj, 
        int last_call_status) 
{ 
    // ... 
    if (argc == 0 || !SYMBOL_P(argv[0])) { 
     rb_raise(rb_eArgError, "no id given"); 
    } 
    // ... 
} 
+0

現金給你的人:) https://github.com/ruby/ruby/commit/e26ba49bd15079b5567048ef1714c2b6d1719eee –

相關問題