Метод Require в Ruby

Для создания повторно используемых компонентов, которые могут быть легко использованы в других программах, язык программирования должен иметь некоторый способ плавного импорта этого кода во время выполнения. В Рубин, требовать Метод используется для загрузки другого файла и выполнения всех его заявления. Это служит для импорта всего класса и метод определения в файле. В дополнение к простому выполнению всех операторов в файле, метод require также отслеживает, какие файлы были ранее необходимы, и, таким образом, файл не потребуется дважды.

Использование метода require

Метод require принимает имя файла для запроса как строкав качестве единственного аргумента. Это может быть путь к файлу, например ./lib/some_library.rb или сокращенное имя, такое как some_library. Если аргумент является путем и полным именем файла, метод require будет искать там файл. Однако, если аргумент является сокращенным именем, метод require будет искать в этом файле несколько предопределенных каталогов в вашей системе. Использование сокращенного имени является наиболее распространенным способом использования метода require.

instagram viewer

В следующем примере показано, как использовать оператор require. Файл test_library.rb находится в первом блоке кода. Этот файл печатает сообщение и определяет новый класс. Второй блок кода - это файл test_program.rb. Этот файл загружает test_library.rb файл с использованием соответствующего метода и создает новый TestClass объект.

ставит "test_library включены"
класс TestClass
инициализация по умолчанию
помещает "объект TestClass создан"
конец
конец
#! / usr / bin / env ruby
требуют 'test_library.rb'
t = TestClass.new

Избегайте именных столкновений

При написании повторно используемых компонентов лучше не объявлять много переменных в глобальной области видимости вне каких-либо классов или методов или с помощью $ приставка. Это чтобы предотвратить то, что называетсязагрязнение пространства именMsgstr "" Если вы объявляете слишком много имен, другая программа или библиотека может объявить то же имя и вызвать конфликт имен. Когда две совершенно не связанные между собой библиотеки начнут случайно менять переменные друг друга, все будет сломано - по-видимому, наугад. Это очень сложная ошибка, которую нужно отследить, и лучше всего ее избежать.

Чтобы избежать конфликтов имен, вы можете заключить все в вашей библиотеке внутри модуль заявление. Это потребует, чтобы люди обращались к вашим классам и методам под полным именем, таким как MyLibrary:: my_method, но оно того стоит, так как конфликт имен вообще не происходит. Для людей, которые хотят, чтобы все ваши имена классов и методов находились в глобальной области видимости, они могут сделать это, используя включают заявление.

Следующий пример повторяет предыдущий пример, но заключает все в Моя библиотека модуль. Две версии my_program.rb дано; тот, который использует включают заявление и то, что нет.

ставит "test_library включены"
модуль MyLibrary
класс TestClass
инициализация по умолчанию
помещает "объект TestClass создан"
конец
конец
конец
#! / usr / bin / env ruby
требуют 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
требуют 'test_library2.rb'
включить MyLibrary
t = TestClass.new

Избегайте абсолютных путей

Поскольку повторно используемые компоненты часто перемещаются, также лучше не использовать абсолютные пути в ваших вызовах по требованию. Абсолютный путь - это путь /home/user/code/library.rb. Вы заметите, что файл должен быть в этом точном месте, чтобы работать. Если скрипт будет перемещен или ваш домашний каталог когда-либо изменится, оператор require перестанет работать.

Вместо абсолютных путей часто принято создавать ./lib каталог в каталоге вашей программы Ruby. ./lib каталог добавлен в $ LOAD_PATH переменная, в которой хранятся каталоги, в которых метод require ищет файлы Ruby. После этого, если файл my_library.rb хранится в каталоге lib, его можно загрузить в вашу программу с помощью простого требует 'my_library' заявление.

Следующий пример такой же, как предыдущий test_program.rb Примеры. Тем не менее, он предполагает test_library.rb файл хранится в ./lib каталог и загружает его, используя метод, описанный выше.

#! / usr / bin / env ruby
$ LOAD_PATH << './lib'
требуют 'test_library.rb'
t = TestClass.new
instagram story viewer