Comment la charge diffère-t-elle d’exigence dans Ruby?

Existe-t-il une différence majeure entre le load et l’ require dans les applications Ruby on Rails? Ou ont-ils tous deux la même fonctionnalité?

require recherches pour la bibliothèque dans tous les chemins de recherche définis et ajoute également .rb ou .so au nom de fichier que vous entrez. Il s’assure également qu’une bibliothèque n’est incluse qu’une seule fois. Donc, si votre application requirejs les bibliothèques A et B et que la bibliothèque B requirejs une bibliothèque, A aussi ne serait chargé qu’une seule fois.

Avec le load vous devez append le nom complet de la bibliothèque et le charger à chaque appel, même s’il est déjà en mémoire.

Une autre différence entre Kernel#require et Kernel#load est que Kernel#load prend un second argument facultatif qui vous permet d’emballer le code chargé dans un module vide anonyme.

Malheureusement, ce n’est pas très utile. Tout d’abord, il est facile pour le code ed chargé de sortir du module, en accédant simplement à l’espace de noms global, c’est-à-dire qu’il est toujours possible de configurer quelque chose comme class ::Ssortingng; def foo; end end class ::Ssortingng; def foo; end end class ::Ssortingng; def foo; end end . Et deuxièmement, load ne retourne pas le module dans ObjectSpace::each_object(Module) le code, vous devez donc le ObjectSpace::each_object(Module) main dans ObjectSpace::each_object(Module) .