Почему я не могу загрузить скрипты с конкретными именами файлов с помощью `load`? - PullRequest
2 голосов
/ 11 ноября 2010

Вчера я обнаружил, что не могу перезагрузить свой скрипт rss.rb, используя load. Он только делает что-то неизвестное для меня в течение нескольких секунд, возвращает true и не выполняет сценарий. Но он может быть загружен (один раз) без проблем, используя require_relative. Мне пришлось переименовать файл сценария, чтобы использовать его так, как я хотел.
Так почему require_relative работает, а load нет? И как узнать, какие имена файлов не могут быть загружены с load?
Я использую ruby ​​1.9.2p0 (2010-08-18) [i386-mingw32]

UPD:

C:> type 1.rb
p load 'rss.rb'
p load '2.rb'
<br>C:> type rss.rb
p 'rss.rb loaded'
<br>C:> type 2.rb
p '2.rb loaded'
<br>C:> ruby 1.rb
true
"2.rb loaded"
true

1 Ответ

0 голосов
/ 11 ноября 2010

Вы загружаете rss.rb из стандартной библиотеки. load сначала проходит через $LOAD_PATH и, только если файл там не найден, ищет файл в текущем каталоге.

Вы можете заставить его смотреть только в текущем каталоге, выполнив load "./rss.rb".

Причина, по которой он работает с require_relative, заключается в том, что require_relative никогда не смотрит на $LOAD_PATH.

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

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