Какие пути, которые "требуют", ищет по умолчанию?
В Ruby мне сказали, что при выполнении
require "some_file"
Ruby будет искать файл в определенных местах.
Я знаю что это ищет some_file.rb
, но где он ищет его по умолчанию?
5 ответов
Это зависит от вашей платформы и от того, как Ruby был скомпилирован, поэтому нет "ответа" на это. Вы можете узнать, запустив:
ruby -e 'puts $:'
Однако, как правило, у вас есть стандартные пути, библиотеки и пути к библиотекам Ruby, включая arch, версию и общий каталог под каждым.
Ruby просматривает все пути, указанные в $LOAD_PATH
массив.
Вы также можете добавить каталог для поиска следующим образом:
$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
Дополнительные пути могут быть указаны путем установки переменной среды RUBYLIB
Глобальная переменная $LOAD_PATH (также называемая $:) содержит список каталогов, в которых выполняется поиск.
При звонке ruby
в командной строке вы можете указать дополнительные пути поиска, используя -I
аргумент. Сравните вывод
$ ruby -e 'puts $:'
с выходом
$ ruby -I /tmp -e 'puts $:'
обратите внимание, как второй список /tmp
как вариант. Вы можете использовать несколько -I
добавить несколько путей.
Вы также можете использовать его с Шебанг:
#!/usr/bin/ruby -I /tmp -I /usr/local/lib/ruby
require(string) => true или false
Ruby пытается загрузить библиотеку с именем string, возвращая true в случае успеха. Если имя файла не преобразуется в абсолютный путь, его будут искать в каталогах, перечисленных в $:. Если файл имеет расширение ".rb", он загружается как исходный файл; если это расширение ".so", ".o" или ".dll" или любое другое расширение общей библиотеки по умолчанию на текущей платформе, Ruby загружает общую библиотеку как расширение Ruby. В противном случае Ruby пытается добавить к имени ".rb", ".so" и т. Д. Имя загруженной функции добавляется в массив в $:.