Разве «require» в Ruby не включает подпапки автоматически? - PullRequest
3 голосов
/ 06 июня 2009

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

rexml
rexml/document

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

require 'rexml'

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

require 'rexml/document'

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

require 'rexml'
require 'rexml/document'

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

Ответы [ 2 ]

11 голосов
/ 06 июня 2009

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

6 голосов
/ 06 июня 2009

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

...