Где сообщение об ошибке ArgumentError: идентификатор не указан при вызове method_missing
Когда вы звоните method_missing
с первым параметром как 'string'
вместо :symbol
вы получаете это загадочное сообщение об ошибке:
BasicObject.send(:method_missing, 'any-method')
ArgumentError: no id given
from (pry):3:in `method_missing'
Когда вы смотрите на исходный код для 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
, Откуда это?
1 ответ
Решение
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");
}
// ...
}