¿El uso requiere varias veces en el mismo símbolo idempotente?

11

¿Es requireidempotente? es decir, hacer

(require 'helm)

y

(require 'helm)
(require 'helm)

terminar con el mismo resultado?

PythonNut
fuente

Respuestas:

14

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 requirecon el nombre de la característica como argumento. requiremira en la variable global featurespara 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, requireindica un error .

Lunaryorn
fuente
Aceptado por citar los documentos.
PythonNut
Incorpore la información de la respuesta de Gilles aquí. O, @Gilles, poner esta respuesta en la tuya también funcionaría.
daveloyall
13

Sí, siempre que el código cumpla helm.elo helm.elcrespete la regla a la que debe llamar (provide 'helm). La llamada (provide 'helm)marca el símbolo helmcomo una característica cargada , y esto hace que la segunda llamada (require 'helm)no haga nada.

Si el paquete cargado no llama, provideentonces requireindica 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).

Gilles 'SO- deja de ser malvado'
fuente
+1 Gracias por la información extra. Resolvió mi confusión después de leer los documentos.
PythonNut