Was ist der beste Weg, um alle Dateien aus einem Verzeichnis in Ruby erfordern?
Antworten
Zu viele Anzeigen?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 }
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").
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.
- See previous answers
- Weitere Antworten anzeigen