Il y a trois types de chargement de package dans Ruby:
- chargement Explicitement une bibliothèque
require
- chargement Implicitement une bibliothèque à l'aide
autoload
- Importation d'une bibliothèque
gem
Le require
la méthode est la plus directe et a l'effet de charger et d'exécuter ce par fichier spécifique. Étant donné que ce fichier peut aller jusqu'à require
autres, par commodité, vous pouvez finir par charger beaucoup en même temps.
La méthode autoload
déclare un module qui sera chargé si vous faites référence à un symbole donné. C'est une méthode courante pour éviter de charger des choses dont vous n'avez pas besoin, mais les rendre automatiquement disponibles si vous le faites. La plupart des grandes bibliothèques utilisent cette méthode de chargement pour éviter de déverser toutes les classes dans la mémoire à la fois.
L'approche gem
est une façon plus formelle d'emballage une bibliothèque. Bien qu'il soit rare que les applications soient divisées en une ou plusieurs gemmes, cela est possible et offre certains avantages. Il n'y a aucune obligation de publier un gem
en open-source, vous pouvez le garder privé et le distribuer par vos propres canaux, soit un site web privé ou un dépôt git
, ou simplement copier et installer le fichier .gem
comme requis.
Cela étant dit, si vous voulez faire une bibliothèque qui charge automatiquement un tas de choses, vous pourriez prendre cette approche:
# lib/example.rb
Dir.glob(File.expand_path('example/**/*.rb', File.dirname(__FILE__))).each do |file|
require file
end
Cela charge tous les .rb
fichiers lib/example
lorsque vous appelez require 'example'
.
Comment les modules sont-ils liés à cette question? –
Quand vous venez de Java organiser des choses est une chose très difficile à comprendre. Je sais que Mike demandait comment charger tous les fichiers dans un dossier. J'essayais juste de lui donner un indice sur un problème plus complexe. Et si vous essayez de charger tous les fichiers dans un dossier, vous n'organisez pas votre code. Je connais parfaitement son feeling car j'ai le même background Java. – lucapette
Il parlait de l'équivalent de l'emballage Java. Ce sont des modules et nécessitent, pas seulement besoin. – Andy