67 votes

Quand utiliser `require`,` load` ou `autoload` dans Ruby?

Je comprends les différences subtiles entre require, load et autoload en Ruby, mais ma question est, comment savez-vous lequel utiliser?

D'autres que d'être capable de "wrap", une load anonyme module, require semble être préféré.

Mais alors autoload vous permet de lazy load fichiers -- qui a l'air fantastique, mais je ne suis pas sûr que pratiquement ce que vous gagnez plus de require

Est une méthode préférée à une autre? Il existe une situation où un méthode se démarque?

71voto

Brian Campbell Points 101107

En général, vous devez utiliser require. load re-charger le code à chaque fois, donc si vous le faites à partir de plusieurs modules, vous allez faire beaucoup de travail supplémentaire. La paresse de l' autoload sonne bien en théorie, mais beaucoup de Ruby modules de faire des choses comme le singe brassage des autres classes, ce qui signifie que le comportement de sans rapport avec les parties de votre programme peut dépendre de l'existence d'une classe donnée a été utilisé ou non. autoload a également été supprimé, de sorte que son utilisation doit être évitée.

Si vous voulez faire votre propre automatique reloader de chargement de votre code à chaque fois qu'il change, ou à chaque fois que quelqu'un frappe une URL (à des fins de développement, de sorte que vous n'avez pas à redémarrer votre serveur à chaque fois), puis à l'aide de load pour ce qui est raisonnable.

21voto

crazycrv Points 781

mylibrary.rb

 puts "I was loaded!"

class MyLibrary
end
 

Essayer en irb

 irb(main):001:0> require 'mylibrary'
I was loaded!
=> true

irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>
 

Regarde la différence.

6voto

Boris Stitnicky Points 5409

En dehors de ce que d’autres vous ont déjà dit, l’avenir de autoload est incertain. Il était programmé pour être obsolète dans Ruby 2.0, mais cette dépréciation n'a pas été faite à temps pour le gel des fonctionnalités 2.0. On s'attend maintenant à ce que autoload soit déconseillé dans Ruby 2.1, mais ce n'est même plus certain .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X