Почему NameError имеет NameError у предков на второй (не первой) позиции? - PullRequest
1 голос

Хотя я пытался полностью понять разницу между NoMethodError и NameError, я обнаружил, что NameError не находится на 0 позиции у предков. Это какая-то магия DidYouMean?

[1] pry(main)> NameError.ancestors
=> [DidYouMean::Correctable,
 NameError,
 StandardError,
 Exception,
 ActiveSupport::Dependencies::Blamable,
 ActiveSupport::ToJsonWithActiveSupportEncoder,
 Object,
 ActiveSupport::Dependencies::Loadable,
 PP::ObjectMixin,
 Nori::CoreExt::Object,
 JSON::Ext::Generator::GeneratorMethods::Object,
 ActiveSupport::Tryable,
 Kernel,
 BasicObject]

Кстати: для тех, кто не знает разницы между NoMethodError и NameError. NameError возникает при попытке получить доступ к чему-то, что может быть локальной переменной, например

(pry)> foo # this can be both - local variable or method => NameError
(pry)> Object.foo # this is 100% method => NoMethodError

1 Ответ

3 голосов
/ 27 июня 2019

Это магия DidYouMean?

Нет, просто обычный рубин. Вот что происходит, когда вы используете prepend.

NameError.prepend DidYouMean::Correctable
KeyError.prepend DidYouMean::Correctable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...