Pregunta

Entiendo las sutiles diferencias entre require , load y autoload en Ruby, pero mi pregunta es, ¿cómo sabes cuál elegir? ¿utilizar?

Aparte de poder envolver " un load en un módulo anónimo, require parece ser el preferido.

Pero luego autoload le permite cargar archivos de manera diferida, lo que suena fantástico, pero no estoy seguro de lo que gana con require

¿Se prefiere un método sobre el otro? ¿Hay una situación en la que se destaca un método?

¿Fue útil?

Solución

En general, debe usar require . load volverá a cargar el código cada vez, así que si lo haces desde varios módulos, estarás haciendo un montón de trabajo adicional. La pereza de autoload suena bien en teoría, pero muchos módulos de Ruby hacen cosas como parchar el mono a otras clases, lo que significa que el comportamiento de partes no relacionadas de su programa puede depender de si se ha utilizado una clase determinada aun o no autoload está en proceso de ser desaprobado , por lo que su uso debe evitarse.

Si desea crear su propio cargador automático que carga su código cada vez que cambia o cada vez que alguien ingresa a una URL (para fines de desarrollo, de modo que no tenga que reiniciar su servidor cada vez), utilice la carga para eso es razonable.

Otros consejos

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Prueba 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>

Ver la diferencia.

Esto es lo que gana con carga automática sobre require :

autoload es principalmente para acelerar la fase de inicialización de su programa Ruby o aplicación Rails. Al no cargar los recursos hasta que se necesiten, puede acelerar las cosas bastante.

Otra ventaja es que es posible que no necesite cargar algunas partes del código, si el usuario no usa ciertas funciones, lo que mejora el tiempo de carga y reduce la huella de memoria.

Aparte de lo que otros ya le han dicho, el futuro de autoload es incierto. Estaba programado para ser desaprobado en Ruby 2.0, pero la desaprobación no se hizo a tiempo para el congelamiento de la característica 2.0. Ahora se espera que autoload esté en desuso en Ruby 2.1, pero eso es ni siquiera estoy seguro .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top