Если у меня есть такая структура папок:

rexml
rexml/document

Не является ли следующий синтаксис рекурсивной ссылкой, включающей все, что ниже него?

require 'rexml'

Или мне нужно написать следующее, если я также хочу получить доступ к тому, что находится в 'document' ?:

require 'rexml/document'

Причина, по которой я смущен, заключается в том, что я вижу код, в котором автор пишет оба оператора require один за другим:

require 'rexml'
require 'rexml/document'

Я не был уверен, действительно ли это было необходимо.

3
Hola 6 Июн 2009 в 01:50

2 ответа

Лучший ответ

Стандартный Ruby require загружает только файлы Ruby, но не папки или что-либо еще. Когда вы говорите «require 'rexml'», вы фактически говорите «найдите 'rexml.rb' в одном из путей в $: и загрузите его». Таким образом, «require 'rexml / document'» ищет файл «document.rb» в папке «rexml» по одному из путей в $ :.

11
Chuck 6 Июн 2009 в 02:15

В Ruby для require требуется только один файл. Однако во многих случаях авторы библиотек / драгоценных камней гарантируют, что для этого единственного файла требуется весь другой код, необходимый для использования библиотеки - см. , например, эти строки в библиотеке nokogiri . Однако это может варьироваться от библиотеки к библиотеке, и в случае REXML кажется, что вам действительно нужно требовать rexml / document.

6
Greg Campbell 6 Июн 2009 в 01:58