#ruby-on-rails #ruby #ruby-on-rails-6
#ruby-on-rails #ruby #ruby-on-rails-6
Вопрос:
Я работал с парой Ruby gems, а также с Rails. Одна вещь, которую я никогда до конца не понимал, — это почему Rails требовал явных ссылок на константы класса для кода, определенного в /lib
папке. В рубиновом камне я мог бы создать что-то вроде этого:
lib/my_gem/custom_error.rb
module MyGem
class CustomError < StandardError
end
end
lib/my_gem/some_class.rb
module MyGem
class SomeClass
def initialize
raise CustomError
end
end
end
Будь то ошибка, другой класс или что-то еще, если вызывающий класс находится в том же пространстве имен, что и ссылочный класс, ruby инициализирует правильный класс CustomError
в приведенном выше случае. Переход к Rails, это другая история, и этот код приведет к неинициализированной постоянной ошибке. В Rails я должен был бы raise MyGem::CustomError
сделать это вместо этого. Почему это так? Я предполагаю, что это как-то связано с автозагрузкой. Есть ли способ обойти это или это стандарт?
Комментарии:
1. Да, есть способы обойти это, но вы используете их на свой страх и риск. Вы захотите ознакомиться с автозагрузкой… guides.rubyonrails.org/v5.2 / … и поймите, что это также зависит от версии rails, которую вы используете.
2. Сравнить невозможно.