Глобально доступная функция без инициализации - PullRequest
0 голосов
/ 13 апреля 2020

Возможно ли в Rails иметь "простую" функцию, доступную глобально?

do_something  

=> "Конечно"

Я имею попытался добавить метод экземпляра в класс Object, но это добавляет этот метод ко всему.

1 Ответ

2 голосов
/ 13 апреля 2020

Да. Просто объявите метод в Main (который является глобальной областью действия в Ruby) в любой точке вашего приложения:

# config/application.rb
# ...
def do_something  
end

Вы можете явно ссылаться на метод с помощью ::do_something, но с тем способом, которым вложенность модуля работает в ruby любой вызов go в любом случае приведет к увеличению вложенности модуля в Main.

Тем не менее это глупая идея, так как код не будет перезагружен в процессе разработки и загрязняет глобальное пространство имен. И так как Main находится на модуле вложения всего, как объект, вы добавляете метод do_something ко всем объектам в системе.

Если вы хотите избежать этого, вам нужно будет создать лямбда / про c, назначенную глобальной / постоянной:

$do_something = ->{}
DO_SOMETHING = ->{}

Или просто расти и инкапсулировать ваш метод в модуль / класс.

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