Afin de créer des composants réutilisables, ceux qui peuvent être facilement utilisés dans d'autres programmes, un langage de programmation doit avoir un moyen d'importer ce code en douceur au moment de l'exécution. En Ruby, le exiger est utilisée pour charger un autre fichier et exécuter toutes ses instructions. Cela permet d'importer toutes les définitions de classe et de méthode dans le fichier. En plus d'exécuter simplement toutes les instructions dans le fichier, la méthode require conserve également la trace des fichiers qui ont été précédemment requis et, par conséquent, ne nécessitera pas un fichier deux fois.
La méthode require prend le nom du fichier à exiger, sous forme de chaîne, comme argument unique. Il peut s'agir d'un chemin d'accès au fichier, tel que ./lib/some_library.rb ou un nom abrégé, tel que some_library. Si l'argument est un chemin d'accès et un nom de fichier complet, la méthode require y recherchera le fichier. Cependant, si l'argument est un nom abrégé, la méthode require recherchera un certain nombre de répertoires prédéfinis sur votre système pour ce fichier. L'utilisation du nom abrégé est la façon la plus courante d'utiliser la méthode require.
L'exemple suivant montre comment utiliser l'instruction require. Le fichier test_library.rb est dans le premier bloc de code. Ce fichier imprime un message et définit une nouvelle classe. Le deuxième bloc de code est le fichier test_program.rb. Ce fichier charge le test_library.rb fichier en utilisant leexigerméthode et crée un nouveau TestClass objet.
met "test_library inclus"
classe TestClass
def initialize
met "objet TestClass créé"
fin
fin
#! / usr / bin / env rubis
nécessite «test_library.rb»
t = TestClass.new
Lors de l'écriture de composants réutilisables, il est préférable de ne pas déclarer de nombreuses variables dans la portée globale en dehors de toute classe ou méthode ou en utilisant le $ préfixe. C'est pour empêcher quelque chose appelé «pollution de l'espace de noms». Si vous déclarez trop de noms, un autre programme ou bibliothèque peut déclarer le même nom et provoquer un conflit de noms. Lorsque deux bibliothèques complètement indépendantes commencent à changer les variables l'une de l'autre accidentellement, les choses se cassent - apparemment au hasard. C'est un bug très difficile à localiser et il vaut mieux juste l'éviter.
Pour éviter les conflits de noms, vous pouvez tout enfermer dans votre bibliothèque à l'intérieur d'une instruction de module. Cela nécessitera que les gens se réfèrent à vos classes et méthodes par un nom complet tel que MyLibrary :: my_method, mais cela en vaut la peine car les conflits de noms ne se produisent généralement pas. Pour les personnes qui souhaitent avoir tous vos noms de classe et de méthode dans la portée globale, ils peuvent le faire en utilisant le comprendre déclaration.
L'exemple suivant répète l'exemple précédent mais englobe tout dans un Ma bibliothèque module. Deux versions de my_program.rb sont donnés; celui qui utilise le comprendre déclaration et celle qui ne.
met "test_library inclus"
module MyLibrary
classe TestClass
def initialize
met "objet TestClass créé"
fin
fin
fin
#! / usr / bin / env rubis
nécessite «test_library2.rb»
t = MyLibrary :: TestClass.new
#! / usr / bin / env rubis
nécessite «test_library2.rb»
inclure MyLibrary
t = TestClass.new
Étant donné que les composants réutilisables sont souvent déplacés, il est également préférable de ne pas utiliser de chemins absolus dans vos appels requis. Un chemin absolu est un chemin comme /home/user/code/library.rb. Vous remarquerez que le fichier doit se trouver à cet emplacement exact pour fonctionner. Si le script est déplacé ou que votre répertoire personnel change, cette instruction require cessera de fonctionner.
Au lieu de chemins absolus, il est souvent courant de créer un ./ lib dans le répertoire de votre programme Ruby. le ./ lib est ajouté au répertoire $ LOAD_PATH variable qui stocke les répertoires dans lesquels la méthode require recherche les fichiers Ruby. Après cela, si le fichier my_library.rb est stocké dans le répertoire lib, il peut être chargé dans votre programme avec un simple nécessite 'ma_bibliotheque' déclaration.
L'exemple suivant est le même que le précédent test_program.rb exemples. Cependant, il suppose test_library.rb fichier est stocké dans le ./ lib répertoire et le charge en utilisant la méthode décrite ci-dessus.
#! / usr / bin / env rubis
$ LOAD_PATH << './lib'
nécessite «test_library.rb»
t = TestClass.new