¿Es require
idempotente? es decir, hacer
(require 'helm)
y
(require 'helm)
(require 'helm)
terminar con el mismo resultado?
Si. De características nombradas (énfasis mío):
El nombre de una función es un símbolo que representa una colección de funciones, variables, etc. El archivo que las define debe proporcionar la función. Otro programa que los use puede garantizar que se definan al requerir la función. Esto carga el archivo de definiciones si aún no se ha cargado.
Para requerir la presencia de una característica, llame
require
con el nombre de la característica como argumento.require
mira en la variable globalfeatures
para ver si la característica deseada ya se ha proporcionado. Si no, carga la función desde el archivo apropiado . Este archivo debe llamarprovide
al nivel superior para agregar la funciónfeatures
; Si no lo hace,require
indica un error .
Sí, siempre que el código cumpla
helm.el
ohelm.elc
respete la regla a la que debe llamar(provide 'helm)
. La llamada(provide 'helm)
marca el símbolohelm
como una característica cargada , y esto hace que la segunda llamada(require 'helm)
no haga nada.Si el paquete cargado no llama,
provide
entoncesrequire
indica un error, y la función no está marcada como cargada, por lo que una segunda llamada(require 'helm)
intentaría la carga nuevamente (y normalmente falla nuevamente por la misma razón).fuente