Comecei a usar o emacs há alguns dias e li em algum lugar que (require 'package-name)
não é necessário quando o referido pacote é instalado usando o pacote de instalação. Mas por que, o que (require 'package-name)
realmente faz e como ela difere load-file
ou load
procedimentos?
10
M-x describe-function
ler a sequência de documentos. akaC-h f
DigiteM-x describe-function RET require RET
e leia a sequência de documentos. Em seguida, digiteM-x describe-function RET load-file RET
e leia a sequência de documentos. Em seguida, digiteM-x describe-function RET load RET
e leia a sequência de documentos. Depois de ler todas as três seqüências de documentos, edite sua pergunta para comparar e contrastar todas as três funções e esclarecer o que você ainda não entende em relação a elas. Empregamos o mesmo procedimento para variáveis - ieM-x describe-variable
,.Respostas:
Se você
load
usar uma biblioteca repetidamente, esse arquivo será lido e seu código avaliado repetidamente (sempre que você o carregar).Se você for
require
uma biblioteca repetidamente, ela seráload
a biblioteca uma vez (no máximo - e de modo algum se a biblioteca já tiver sido carregada).require
fornece essa eficiência mesmo querequire
não tenha sido usado para carregar a biblioteca inicialmente, porque (a grande maioria das) bibliotecas contém o código(provide 'FEATURE)
para seuFEATURE
nome específico . Esse código é avaliado quando a biblioteca é carregada, independentemente de como foi carregada, e nesse momento atualiza os dados querequire
verificam ao decidir se é necessário fazer alguma coisa.Principalmente, você deseja usar
require
em seu próprio código, se precisar garantir que uma determinada biblioteca tenha sido carregada.O motivo pelo qual você geralmente não precisa fazer isso com os pacotes ELPA é que o gerenciador de pacotes processa automaticamente qualquer cookie de carregamento automático no pacote e gera um arquivo de carregamento automático para esse pacote. Quando o sistema de pacotes é inicializado quando você inicia o Emacs, é avaliado o arquivo de carregamento automático de cada pacote, que identifica todas as funções de carregamento automático. Quando uma função carregada automaticamente é chamada, a biblioteca que contém a definição real da função é carregada automaticamente.
Os autores do pacote podem adicionar um cookie de carregamento automático a cada função que o usuário possa chamar diretamente e, portanto, desde que as expectativas estejam corretas, você não precisará ligar
require
ou carregar explicitamente o pacote para usá-lo.Observe que você também pode definir seus próprios carregamentos automáticos personalizados. Veja C-hig
(elisp) Autoload
RETe também(elisp) Hooks for Loading
se você deseja usar o carregamento lento e a configuração adiada das bibliotecas em sua própria configuração. (O último a dizer "não avalie esse código até que esta biblioteca tenha sido carregada", o que está relacionado com o mecanismo "não carrega esta biblioteca até que seja necessário").fonte
(elisp) Named Features
.