6 Stimmen

Kürzere Version von Dir[File.join(File.dirname(__FILE__), "subdirectory/**/*.rb")]?

Dies ist zwar eine etwas unbedeutende Frage, aber jedes Mal, wenn ich einen Edelstein erstelle und alle Dateien in einem Unterverzeichnis zu einem bestimmten Zweck laden muss (oder einfach nur ein schnelles und schmutziges Vorladen), frage ich mich: "Es muss doch einen saubereren Weg geben", und beziehe mich dabei auf dieses allgemeine Muster:

Dir[File.join(File.dirname(__FILE__), "subdirectory/**/*.rb")].each { |f| require f }

Die Notwendigkeit eines Anrufs File.dirname auf __FILE__ das macht es unnötig langatmig. Sie können nicht wirklich einen relativen Pfad innerhalb eines Edelsteins verwenden, da Sie keine Ahnung haben, woher Sie geladen werden.

1voto

knut Punkte 26345

Welche Rube verwenden Sie? Mit Ruby 1.9 können Sie verwenden require_relative .

require_relative 'subdirectory/file1.rb'
require_relative 'subdirectory/file2.rb'
#...

Aber Sie müssen die Dateien kennen. require_relative wird nicht funktionieren mit alle Dateien in Unterverzeichnissen . Aber ich würde nicht empfehlen, eine solche generische Lektüre in einem Edelstein zu verwenden. Sie sollten wissen, was Sie laden.

Wenn Sie es wirklich wollen, können Sie etwas wie dieses verwenden:

Dir.chdir(File.dirname(__FILE__)){
  Dir["**/*.rb"].each { |f| 
    require_relative f
  }
}

Mit Ruby 1.8 sollte dies funktionieren:

Dir.chdir(File.dirname(__FILE__)){
  Dir["./**/*.rb"].each { |f| 
    require f
  }
}

Betreffend File.join erledigt einige Dinge für Windows : File.join baut den Pfad auf, so dass das Betriebssystem ihn verwenden kann. Unter Unix ist der Pfadseparator / unter Windows \ . Aber wie Sie bereits geschrieben haben: Rubin versteht / Daher spielt es unter Windows keine Rolle. Aber was passiert, wenn Sie mit dem klassischen Mac OS arbeiten? Dort ist es ein : (siehe Wikipedia Pfad_(Informatik) ). Daher ist es besser, join zu verwenden (oder Sie verwenden meine Dir.chdir-Variante)

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