En Ruby, on m'a dit qu'en faisant
require "some_file"
Ruby recherchera le fichier à certains endroits.
Je sais qu'il cherche some_file.rb
, mais où le recherche-t-il par défaut?
Cela dépend de votre plate-forme et de la façon dont Ruby a été compilé, il n'y a donc pas de "réponse" à cela. Vous pouvez le savoir en exécutant:
Ruby -e 'puts $:'
En règle générale, cependant, vous disposez des chemins de bibliothèque standard, site et fournisseur Ruby, y compris un Arch, une version et un répertoire général sous chacun.
Ruby regarde dans tous les chemins spécifiés dans le $LOAD_PATH
tableau.
Vous pouvez également ajouter un répertoire à rechercher comme ceci:
$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
des chemins supplémentaires peuvent être spécifiés en définissant la variable d'environnement RUBYLIB
La variable globale $ LOAD_PATH (également nommée $ :) contient la liste des répertoires recherchés.
Voir: http://www.Ruby-doc.org/core-1.9.3/Kernel.html#method-i-require
require (string) => true ou false
Ruby essaie de charger la bibliothèque nommée chaîne, renvoyant true en cas de succès. Si le nom de fichier ne se résout pas en un chemin absolu, il sera recherché dans les répertoires répertoriés dans $ :. Si le fichier a l'extension ".rb", il est chargé en tant que fichier source; si l'extension est ".so", ".o" ou ".dll", ou quelle que soit l'extension de bibliothèque partagée par défaut sur la plate-forme actuelle, Ruby charge la bibliothèque partagée en tant que = Ruby extension. Sinon, Ruby essaie d'ajouter ".rb", ".so", etc.) au nom. Le nom de la fonction chargée est ajouté au tableau dans $ :.
Lorsque vous appelez Ruby
sur la ligne de commande, vous pouvez fournir des chemins de recherche supplémentaires à l'aide de -I
argument. Comparez la sortie de
$ Ruby -e 'puts $:'
avec la sortie de
$ Ruby -I /tmp -e 'puts $:'
notez comment le second répertorie /tmp
Comme une option. Vous pouvez utiliser plusieurs -I
pour ajouter plusieurs chemins.
Vous pouvez également l'utiliser avec le Shebang:
#!/usr/bin/Ruby -I /tmp -I /usr/local/lib/Ruby