Определение константы в Ruby / Rails - PullRequest
1 голос
/ 22 марта 2019

У меня есть initializers config в моем приложении рельсов под config/initializers/my_config.rb.

В чем разница между:

A:

module MyModule
  Config = "path/to/config.yml"
end

и

B

MyModule::Config = "path/to/config.yml"

Предположим, мы выполнили несколько запросов, изменили его реализацию и снова попали в приложение. Если я определил свою константу способом B , я получу ошибку:

uninitialized constant MyModule::Config

Это будет решено только после перезапуска моего сервера rails. Но когда я выполняю способ A , он все равно распознает константу, когда я обновляю свой код.

В чем важность использования синтаксиса A в этом случае?

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Часть этого, кажется, связана с рельсами Горячая перезагрузка кода , которая имеет кучу предостережений. Если вы не используете горячую перезагрузку кода, A и B более эквивалентны, если сначала определено MyModule.

Однако, когда код перезагружается (в частности, файл, который определяет MyModule), он может в конечном итоге перезаписать существующий модуль и не запускать строку B .

Основное отличие состоит в том, что A не зависит от того, как загружается / запускается порядок другого кода в проекте, но B должен выполняться после определенного кода.

0 голосов
/ 22 марта 2019

Разница в том, что код A вызывает синтаксическую ошибку, а код B - грамматический.Код B вызовет ошибку имени для MyModule, если только она не была определена ранее.

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