Хотя я пытался полностью понять разницу между 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