класс NameError
Вызывается, когда заданное имя является недопустимым или не определено.
puts foo
вызывает исключение:
NameError: undefined local variable or method `foo' for main:Object
Поскольку имена констант должны начинаться с большой буквы:
Fixnum.const_set :answer, 42
вызывает исключение:
NameError: wrong constant name answer
Публичные методы класса
new(msg [, name]) → name_error Показать исходный код
static VALUE
name_err_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE name;
VALUE iseqw = Qnil;
name = (argc > 1) ? argv[--argc] : Qnil;
rb_call_super(argc, argv);
rb_ivar_set(self, id_name, name);
{
rb_thread_t *th = GET_THREAD();
rb_control_frame_t *cfp =
rb_vm_get_ruby_level_next_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp));
if (cfp) iseqw = rb_iseqw_new(cfp->iseq);
}
rb_ivar_set(self, id_iseq, iseqw);
return self;
} Создает новое исключение NameError. Если передан параметр name, им можно будет позже воспользоваться с помощью метода NameError.name.
Публичные методы экземпляра
local_variables → массив Показать исходный код
static VALUE
name_err_local_variables(VALUE self)
{
VALUE vars = rb_attr_get(self, id_local_variables);
if (NIL_P(vars)) {
VALUE iseqw = rb_attr_get(self, id_iseq);
if (!NIL_P(iseqw)) vars = rb_iseqw_local_variables(iseqw);
if (NIL_P(vars)) vars = rb_ary_new();
rb_ivar_set(self, id_local_variables, vars);
}
return vars;
} Возвращает список имен локальных переменных, определенных в месте, где было вызвано исключение NameError.
Только для внутреннего использования.
name → строка или nil Показать исходный код
static VALUE
name_err_name(VALUE self)
{
return rb_attr_get(self, id_name);
} Возвращает имя, связанное с этим исключением NameError.
receiver → объект Показать исходный код
static VALUE
name_err_receiver(VALUE self)
{
VALUE *ptr, recv, mesg;
recv = rb_ivar_lookup(self, id_receiver, Qundef);
if (recv != Qundef) return recv;
mesg = rb_attr_get(self, id_mesg);
if (!rb_typeddata_is_kind_of(mesg, &name_err_mesg_data_type)) {
rb_raise(rb_eArgError, "no receiver is available");
}
ptr = DATA_PTR(mesg);
return ptr[NAME_ERR_MESG__RECV];
} Возвращает получатель, связанный с этим исключением NameError.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.