Acabo de comenzar a usar emacs hace unos días y leí en algún lugar que (require 'package-name)
no es necesario cuando dicho paquete se instala usando package-install. Pero, ¿por qué no (require 'package-name)
hacer realmente y cómo se diferencia de load-file
o load
procedimientos?
10
M-x describe-function
leer la cadena de documentos. akaC-h f
EscribaM-x describe-function RET require RET
y lea la cadena de documentación. Luego escribaM-x describe-function RET load-file RET
y lea la cadena de documentación. Luego escribaM-x describe-function RET load RET
y lea la cadena de documentación. Después de leer las tres cadenas de documentos, edite su pregunta para comparar y contrastar las tres funciones y aclarar qué es lo que aún no comprende en relación con las mismas. Empleamos el mismo procedimiento para las variables - es decir,M-x describe-variable
.Respuestas:
Si tiene
load
una biblioteca repetidamente, ese archivo se leerá y su código se evaluará repetidamente (cada vez que lo cargue).Si tiene
require
una biblioteca repetidamente, lo haráload
una vez (a lo sumo, y nada si la biblioteca ya se ha cargado).require
proporciona esta eficiencia incluso sirequire
no se usó para cargar la biblioteca inicialmente, porque (la gran mayoría de) las bibliotecas contienen el código(provide 'FEATURE)
para suFEATURE
nombre particular . Ese código se evalúa cuando se carga la biblioteca, independientemente de cómo se cargó, y en ese momento actualiza los datos que serequire
comprueban al decidir si necesita hacer algo.Principalmente desea usar
require
en su propio código, si necesita asegurarse de que se haya cargado una biblioteca determinada.La razón por la que a menudo no necesita hacer esto con los paquetes ELPA es que el administrador de paquetes procesa automáticamente las cookies de carga automática en el paquete y genera un archivo de carga automática para ese paquete. Cuando el sistema de paquetes se inicializa cuando inicia Emacs, se evalúa el archivo de carga automática para cada paquete, que identifica todas las funciones cargadas automáticamente. Cuando se llama a una función con carga automática, la biblioteca que contiene la definición real de la función se carga automáticamente.
Los autores de paquetes pueden agregar una cookie de carga automática a cada función a la que se espera que el usuario llame directamente y, por lo tanto, siempre que sus expectativas sean correctas, no necesitará llamar
require
o cargar explícitamente el paquete para usarlo.Tenga en cuenta que también puede definir sus propias cargas automáticas personalizadas. Consulte C-hig
(elisp) Autoload
RETy también(elisp) Hooks for Loading
si desea utilizar la carga diferida personalizada y la configuración diferida de bibliotecas en su propia configuración. (Esto último dice "no evalúe este código hasta que se haya cargado esta biblioteca", lo que se relaciona muy bien con el mecanismo de carga automática "no cargar esta biblioteca hasta que sea necesario").fuente
(elisp) Named Features
.