¿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?

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 .


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).


+1 Gracias por la información extra. Resolvió mi confusión después de leer los documentos.
PythonNut
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.