366 votes

Meilleur moyen d’exiger que tous les fichiers d’un répertoire en ruby ?

Quelle est la meilleure façon d’exiger que tous les fichiers d’un répertoire en ruby ?

485voto

Sam Stokes Points 7118

Que diriez-vous:

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

355voto

jandot Points 2250

Si c’est un dossier relatif au fichier qui fait le nécessitant (par exemple, vous souhaitez charger tous les fichiers dans le répertoire lib) :

52voto

Pete Hodgson Points 5147
<pre><code></code><p>Si vous ne dépouillent pas l’extension, vous pouvez finir par exiger le même fichier deux fois (ruby ne réalise que « foo » et « foo.rb » sont le même fichier). Exigeant le même fichier deux fois peut conduire à fausses mises en garde (par exemple « AVERTISSEMENT : déjà initialisé constante »).</p></pre>

34voto

Ryan McGeary Points 76053

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 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X