Действительно ли возможно рекурсивно потребовать всех файлов в каталоге в Ruby?

Donald E. Knuth ответил на этот вопрос в книге "Грамотное программирование", 1992 CSLI. На p. 17 существует эссе" Структурное программирование с операторами перехода " (PDF). Я думаю, что статья, возможно, была опубликована в других книгах также.

статья описывает предложение Dijkstra и описывает обстоятельства, где это допустимо. Но он также дает много встречных примеров (проблемы и алгоритмы), который не может быть легко воспроизведен с помощью структурированных циклов только.

статья содержит полное описание проблемы, историю, примеры и встречные примеры.

17
задан Adrian 4 December 2009 в 21:32
поделиться

4 ответа

В этом случае он загружает все файлы из каталога lib:

Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }
42
ответ дан 30 November 2019 в 10:29
поделиться
require "find"

Find.find(folder) do |file|
  next if File.extname(file) != ".rb"
  puts "loading #{file}"
  load(file)
end

Будет рекурсивно загружен каждый файл .rb .

6
ответ дан 30 November 2019 в 10:29
поделиться
def rLoad(dir)
    Dir.entries(dir).each {|f|
        next if f=='.' or f=='..'
        if File.directory?(f)
            rInclude(f)
        else
            load(f) if File.fnmatch('*.rb', f)
        end
    }
end

Это должно рекурсивно загрузить все файлы .rb в каталог, указанный в dir . Например, rLoad Dir.pwd будет работать с текущим рабочим каталогом.

Однако будьте осторожны при этом. Это выполняет поиск в глубину, и если есть какие-либо противоречивые определения в ваших сценариях Ruby, они могут быть разрешены каким-то неочевидным образом (я считаю, в алфавитном порядке по имени папки / файла).

0
ответ дан 30 November 2019 в 10:29
поделиться

You should have a look at this gem. It is quite small so you can actually re-use the code instead of installing the whole gem.

0
ответ дан 30 November 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: