Respuestas:
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 globalfeaturespara ver si la característica deseada ya se ha proporcionado. Si no, carga la función desde el archivo apropiado . Este archivo debe llamarprovideal nivel superior para agregar la funciónfeatures; Si no lo hace,requireindica un error .
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).