На этих выходных званый обед, приглашены твои родственники. Как ведущему, у вас много работы по организации и мало времени на это. Перед тем, как развернуть вашу первую закуску, будут отправлены приглашения, собраны ответы и устранены ошибки, при этом родственники не смогут что-либо сломать.

Поскольку у вас так много дел, вы просите своего друга environment.rb помочь организовать и разослать приглашения.

Gemfile, как всегда общительный, ответил на часовой телефонный звонок. Дядя Рейк, быстро отдававший приказы, но не спешивший их выполнять, ответил чуть позже. Обильное семейство DB будет мигрировать со своими новорожденными семенами на буксире. Также может появиться отчужденный сын Гемфайла, .lock. Вы начинаете думать, что вам понадобится еще одна индейка.

Что требуется?

Ruby «require_all» и «require_relative» являются основными методами объекта ядра ruby. Каждый из них отвечает за загрузку файла или группы файлов в требуемый файл, из которого вызывается путем сохранения и / или загрузки необходимого (-ых) файла (-ов) пути (-ов) в глобальную переменную среды ruby, которая содержит массив путей к файлам в виде строк.

При успешной загрузке требуемых файлов все глобальные или постоянные переменные из загруженных файлов будут доступны после вызова require.

Как находятся необходимые файлы?

Требуемые методы принимают аргумент одного пути к файлу в виде строки. Путь к файлу может быть абсолютным или относительным по отношению к файлу, в котором вызывается метод. Каждый метод начинает поиск нужного файла (ов) по пути относительно файла, в котором вызывается метод, а затем как абсолютный путь к файлу из каталога.

Если совпадение найдено, оно будет загружено как переменная среды, и метод вернет значение true.

Однако, если таким образом не будет возвращен ни один соответствующий файл, Ruby будет искать файлы по тем же путям, что и .so, .o, .or, и .dll. расширения файлов, которые также совместимы с ruby.

Пустой результат приведет к тому, что метод будет искать переменную среды $ LOAD_PATH или $ PATH (характерную для Windows и MacOS соответственно), которая содержит все ранее загруженные файлы. При совпадении здесь метод вернет false и больше не загрузит файл. Следовательно, требуемые пути к файлам могут быть сохранены в их переменных среды только один раз.

Если таким образом не будет найдено подходящего файла, будет возвращена ошибка LoadError.

Куда загружаются файлы?

Все файлы, указанные в вашей программе, хранятся в переменной окружения bash «$ LOAD_PATH» или «$ PATH», массиве строк путей к файлам, указывающих, где хранятся файлы Ruby.

Константы или глобальные переменные, загруженные из пути к файлу, переданного с помощью require, будут сохранены и станут доступными в глобальном пространстве имен вызывающей программы, за исключением локальных переменных.

Какие ответы ожидаются?

Любые константы или глобальные переменные в загруженном исходном файле будут доступны в глобальном пространстве имен вызывающей программы. Однако локальные переменные не будут переданы в среду загрузки.

TL; DR; Require делает все переменные, кроме локальных, из одного файла доступными в другом

Источники:

Ruby-doc.org: https://ruby-doc.org/core-2.5.1/Kernel.html#method-i-require

Thought Co. Майкл Морин: https://www.oughttco.com/requre-method-2908199

Гифи: https://giphy.com/