Pergunta

Eu entendo as sutis diferenças entre require, load e autoload em Ruby, mas a minha pergunta é, como você sabe qual usar?

Além de ser capaz de "embrulhar" um load em um módulo anônimo, require parece ser o preferido.

Mas então autoload permite carregar arquivos preguiçosos - que soa fantástico, mas eu não tenho certeza praticamente o que você ganha ao longo require

é um método preferido sobre o outro? Existe uma situação em que um método se destaca?

Foi útil?

Solução

Geralmente, você deve usar require. load vai voltar a carregar o código de cada vez, por isso, se você fazê-lo a partir de vários módulos, você estará fazendo um monte de trabalho extra. A preguiça de autoload parece bom em teoria, mas muitos módulos de Ruby fazer coisas como-remendar macaco outras classes, o que significa que o comportamento das partes não relacionadas de seu programa pode depender se uma determinada classe ainda não foi ou não utilizado. autoload está no processo de ser descontinuada , pelo que a sua utilização deve ser evitada.

Se você quiser fazer o seu próprio reloader automática que carrega o código de cada vez que muda ou a cada vez que alguém bate uma URL (para fins de desenvolvimento, assim você não tem que reiniciar o servidor de cada vez), em seguida, usando load para esse é razoável.

Outras dicas

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Tente no 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>

Veja a diferença.

aqui está o que você ganha com autoload sobre require:

autoload é principalmente para acelerar a fase de inicialização do seu programa Ruby ou aplicação Rails. Por não carregar os recursos até que sejam necessárias, isso pode acelerar as coisas um pouco.

Outra vantagem é que você pode não precisar carregar algumas partes do código, se o usuário não usar determinados recursos -. Melhorando assim o tempo de carga e reduzir a pegada de memória

Além de que outros já lhe disse, futuro da autoload é incerto. Foi programado para ser preterido em Ruby 2.0, mas a reprovação não foi feito a tempo para o congelamento de recurso 2.0. Espera-se agora que autoload será depreciado em Ruby 2.1, mas isso não é sequer certo mais .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top