Diferencia entre load-file y load

17

Revisé la documentación de ambas funciones, pero no parecen arrojar mucha información. ¿Cuál es la diferencia real entre ellos además del hecho de que loades una función incorporada en el código fuente C, mientras que el archivo de carga es una función compilada de lista interactiva?

¿Cuál es la función recomendada para usar init.elya que ambos parecen estar haciendo el mismo trabajo?

Sibi
fuente
2
¿Qué parte de la documentación para esto no estaba clara a este respecto? Considere reportar el problema doc, si realmente parece que es uno: M-x report-emacs-bug. Como dice @shosti, y como lo indica claramente el documento, load-file" no usa load-pathy no agrega sufijos ", para dos diferencias importantes.
Dibujó el
Vea también el manual de Emacs, Bibliotecas Lisp de nodo .
Drew

Respuestas:

14

Hay varias formas de cargar archivos Lisp en Emacs:

  1. load-filetoma un nombre de archivo literal (relativo o absoluto) y carga el código. Ejemplo:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loades como load-file, excepto que es más flexible: puede omitir la extensión y cargará automáticamente el archivo "elc" o "el" según corresponda.
    También se ve en los load-pathdirectorios.
    Ejemplo: (load "foo")(si "foo.el" está en el directorio actual o en la ruta de carga ").
  3. load-libraryes una interfaz interactiva para load.
  4. requirees similar a load, excepto que evita que el archivo se cargue más de una vez (también requiere una providedeclaración correspondiente al final del archivo en cuestión). Ejemplo:(require 'foo)
shosti
fuente
3
Tu requireejemplo es un loadejemplo. ;-)
Dibujó el
El load-fileejemplo usa load. :)
itsjeyd
2
Lamento decir que 2 y 3 estaban equivocados. :-) load hace mirada hacia el load-path.
Malabarba
@Malabarba Vaya, tienes razón, gracias por la corrección. Eso es más confuso de lo que pensaba.
shosti
8

load-filey load-libraryson comandos para uso interactivo (donde la diferencia principal está en el contenido inicial de la solicitud).

loades la función subyacente a usar cuando escribe Elisp (como en sus .emacs).

Stefan
fuente