web-dev-qa-db-fra.com

Quels sont les chemins qui "nécessitent" des recherches par défaut?

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?

54
Mark Provan

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.

69
Daniel Pittman

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__)
24
Brian Hempel

des chemins supplémentaires peuvent être spécifiés en définissant la variable d'environnement RUBYLIB

8
mighq

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

6
Perry

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 $ :.

1
ericraio

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
0
Mecki