Quelle est la meilleure façon d’exiger que tous les fichiers d’un répertoire en ruby ?
Réponses
Trop de publicités?La meilleure façon est d'ajouter le répertoire dans le chemin de chargement et ensuite, require
le nom de base de chaque fichier. C'est parce que vous voulez éviter accidentellement nécessitant deux fois le même fichier -- souvent pas le comportement voulu. Si un fichier sera chargé ou pas dépend de la require
a vu le chemin est passé avant. Par exemple, ce simple de la cisr session montre que l'on peut à tort d'exiger et de charger deux fois le même fichier.
$ irb
irb(main):001:0> require 'test'
=> true
irb(main):002:0> require './test'
=> true
irb(main):003:0> require './test.rb'
=> false
irb(main):004:0> require 'test'
=> false
Notez que les deux premières lignes de revenir true
sens le même fichier a été chargé à deux reprises. Lorsque les chemins d'accès sont utilisées, même si les chemins d'accès pointant vers le même emplacement, require
ne sait pas que le fichier a déjà été nécessaire.
Ici, au lieu de cela, nous avons ajouter un répertoire dans le chemin de chargement et ensuite exiger le nom de base de chaque *.rb fichier à l'intérieur.
dir = "/path/to/directory"
$LOAD_PATH.unshift(dir)
Dir[File.join(dir, "*.rb")].each {|file| require File.basename(file) }
Si vous n'avez pas de soins sur le fichier requis plus d'une fois, votre intention est simplement de charger le contenu du fichier, et peut - load
doit être utilisé à la place de require
. Charge d'utilisation dans ce cas, parce qu'il exprime mieux ce que vous essayez d'accomplir. Par exemple:
Dir["/path/to/directory/*.rb"].each {|file| load file }