Question

Je comprends les différences subtiles entre require , load et autoload dans Ruby, mais ma question est la suivante: comment savoir à qui utilisation?

Autre que pouvoir "emballer" load dans un module anonyme, require semble être préféré.

Mais alors autoload vous permet de charger des fichiers paresseux - cela semble fantastique mais je ne suis pas sûr de ce que vous gagnez avec require

Une méthode est-elle préférée à une autre? Y a-t-il une situation où une méthode se démarque?

Était-ce utile?

La solution

En règle générale, vous devez utiliser require . load rechargera le code à chaque fois, donc si vous le faites à partir de plusieurs modules, vous ferez beaucoup de travail supplémentaire. La paresse de autoload sonne bien en théorie, mais de nombreux modules Ruby font des tâches similaires à la correction de singe par d'autres classes, ce qui signifie que le comportement de parties non liées de votre programme peut dépendre du fait qu'une classe donnée a été utilisée ou non. encore ou pas. chargement automatique est en train d'être obsolète , de sorte que son utilisation est devrait être évité.

Si vous voulez créer votre propre rechargeur automatique qui charge votre code chaque fois qu'il change ou chaque fois que quelqu'un frappe une URL (à des fins de développement, vous n'avez donc pas besoin de redémarrer votre serveur), utilisez . charger car cela est raisonnable.

Autres conseils

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Essayez dans 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>

Voir la différence.

voici ce que vous gagnez avec autoload sur require :

autoload sert principalement à accélérer la phase d'initialisation de votre programme Ruby ou de votre application Rails. En ne chargeant pas les ressources tant qu’elles ne sont pas utilisées, cela peut accélérer un peu les choses.

Un autre avantage est que vous n'aurez peut-être pas besoin de charger certaines parties du code si l'utilisateur n'utilise pas certaines fonctionnalités, ce qui améliore le temps de chargement et réduit l'encombrement de la mémoire.

Hormis 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. Il est maintenant prévu que autoload soit déconseillé dans Ruby 2.1, mais même plus certain .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top