Diferença entre carregar arquivo e carregar

17

Examinei a documentação de ambas as funções, mas elas não parecem lançar muita informação. Qual é a diferença real entre eles, além do fato de loadser uma função interna no código-fonte C, enquanto o arquivo de carregamento é uma função compilada de lista interativa.

Qual é a função recomendada para usar, init.elpois ambos parecem estar fazendo o mesmo trabalho?

Sibi
fonte
2
Que parte da documentação para isso não ficou clara a esse respeito? Considere relatando o problema doc, se você realmente acha que existe um: M-x report-emacs-bug. Como o @shosti diz, e como o documento indica claramente, load-file" não usa load-pathe não acrescenta sufixos ", por duas diferenças importantes.
Tirou
Veja também o manual do Emacs, nó Lisp Libraries .
Drew

Respostas:

14

Existem várias maneiras de carregar arquivos Lisp no Emacs:

  1. load-filepega um nome de arquivo literal (relativo ou absoluto) e carrega o código. Exemplo:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadé como load-file, exceto por ser mais flexível - você pode excluir a extensão e ela carregará automaticamente o arquivo "elc" ou "el" conforme apropriado.
    Também examina os load-pathdiretórios.
    Exemplo: (load "foo")(se "foo.el" estiver no diretório atual ou no caminho de carregamento ").
  3. load-libraryé uma interface interativa para load.
  4. requireé semelhante a load, exceto que impede que o arquivo seja carregado mais de uma vez (também requer uma providedeclaração correspondente no final do arquivo em questão). Exemplo:(require 'foo)
shosti
fonte
3
Seu requireexemplo é um loadexemplo. ;-)
Drew
O load-fileexemplo usa load. :)
itsjeyd
2
Lamento dizer que 2 e 3 estavam errados. :-) load faz olhar para a carga-path.
Malabarba
@ Malabarba Opa, você está certo, obrigado pela correção. Isso é mais confuso do que eu pensava.
Shosti
8

load-filee load-librarysão comandos para uso interativo (onde a principal diferença está no conteúdo inicial do prompt).

loadé a função subjacente a ser usada quando você escreve o Elisp (como no seu .emacs).

Stefan
fonte