386 Stimmen

Beste Weg, um alle Dateien aus einem Verzeichnis in Ruby erfordern?

Was ist der beste Weg, um alle Dateien aus einem Verzeichnis in Ruby erfordern?

504voto

Sam Stokes Punkte 14381

Wie wäre es damit:

Dir["/path/to/directory/*.rb"].each {|file| require file }

367voto

jandot Punkte 4124

Wenn es sich um ein Verzeichnis relativ zu der Datei handelt, die die Anforderungen stellt (z. B. wenn Sie alle Dateien im Verzeichnis lib laden wollen):

Dir[File.dirname(__FILE__) + '/lib/*.rb'].each {|file| require file }

Edita: Aufgrund der nachstehenden Kommentare eine aktualisierte Fassung:

Dir[File.join(__dir__, 'lib', '*.rb')].each { |file| require file }

108voto

Versuchen Sie das require_all-Gem:

  1. http://github.com/jarmo/require_all
  2. https://rubygems.org/gems/require_all

Es lässt Sie einfach:

require_all 'path/to/directory'

53voto

Pete Hodgson Punkte 15076
Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| 
  require File.basename(file, File.extname(file))
end

Wenn Sie die Erweiterung nicht entfernen, kann es passieren, dass Sie dieselbe Datei zweimal benötigen (ruby wird nicht erkennen, dass "foo" und "foo.rb" dieselbe Datei sind). Das doppelte Anfordern der gleichen Datei kann zu falschen Warnungen führen (z.B. "warning: already initialized constant").

49voto

metakungfu Punkte 6903
Dir.glob(File.join('path', '**', '*.rb'), &method(:require))

oder wenn Sie die zu ladenden Dateien auf bestimmte Ordner beschränken wollen:

Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require))

Erklärung:

Dir.glob nimmt einen Block als Argument.

Methode(:require) wird die require-Methode zurückgegeben.

&method(:require) wandelt die Methode in einen Block um.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X