Какие пути, которые "требуют", ищет по умолчанию?

В 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 (также называемая $:) содержит список каталогов, в которых выполняется поиск.

См.: http://www.ruby-doc.org/core-1.9.3/Kernel.html

При звонке 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" и т. Д. Имя загруженной функции добавляется в массив в $:.

Другие вопросы по тегам