Ruby Language
Chargement des fichiers source
Recherche…
Les fichiers requis ne doivent être chargés qu'une seule fois
La méthode kernel # require ne chargera les fichiers qu'une seule fois (plusieurs appels à require
auront pour résultat que le code de ce fichier sera évalué une seule fois). Il cherchera votre ruby $LOAD_PATH
pour trouver le fichier requis si le paramètre n'est pas un chemin absolu. Les extensions comme .rb
, .so
, .o
ou .dll
sont facultatives. Les chemins relatifs seront résolus dans le répertoire de travail en cours du processus.
require 'awesome_print'
Le noyau # require_relative vous permet de charger des fichiers relatifs au fichier dans lequel require_relative
est appelé.
# will search in directory myproj relative to current source file.
#
require_relative 'myproj/version'
Chargement automatique des fichiers source
La méthode Kernel#autoload
enregistre le nom du fichier à charger (en utilisant Kernel::require
) la première fois que ce module (qui peut être un String ou un symbole) est accédé.
autoload :MyModule, '/usr/local/lib/modules/my_module.rb'
La méthode Kernel # autoload? renvoie le nom du fichier à charger si name est enregistré en tant que autoload
.
autoload? :MyModule #=> '/usr/local/lib/modules/my_module.rb'
Chargement de fichiers optionnels
Lorsque les fichiers ne sont pas disponibles, la famille require
lance une LoadError
. Ceci est un exemple qui illustre le chargement de modules optionnels uniquement s'ils existent.
module TidBits
@@unavailableModules = []
[
{ name: 'CoreExtend', file: 'core_extend/lib/core_extend' } \
, { name: 'Fs' , file: 'fs/lib/fs' } \
, { name: 'Options' , file: 'options/lib/options' } \
, { name: 'Susu' , file: 'susu/lib/susu' } \
].each do |lib|
begin
require_relative lib[ :file ]
rescue LoadError
@@unavailableModules.push lib
end
end
end # module TidBits
Chargement de fichiers à plusieurs reprises
La méthode de chargement Noyau # évalue le code dans le fichier donné. Le chemin de recherche sera construit comme require
. Il réévaluera ce code à chaque appel suivant, contrairement à la require
. Il n'y a pas de load_relative
.
load `somefile`
Chargement de plusieurs fichiers
Vous pouvez utiliser n'importe quelle technique Ruby pour créer dynamiquement une liste de fichiers à charger. Illustration de la mise en forme pour les fichiers commençant par test
, chargés dans l'ordre alphabétique.
Dir[ "#{ __dir__ }**/test*.rb" ) ].sort.each do |source|
require_relative source
end