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