O uso requer várias vezes no mesmo símbolo idempotente?

11

É requireidempotent? ie fazer

(require 'helm)

e

(require 'helm)
(require 'helm)

terminar com o mesmo resultado?

PythonNut
fonte

Respostas:

14

Sim. Dos recursos nomeados (ênfase minha):

Um nome de recurso é um símbolo que representa uma coleção de funções, variáveis ​​etc. O arquivo que os define deve fornecer o recurso. Outro programa que os utiliza pode garantir que eles sejam definidos exigindo o recurso. Isso carrega o arquivo de definições, se ainda não tiver sido carregado.

Para exigir a presença de um recurso, chame requirecom o nome do recurso como argumento. requireprocura na variável global featurespara ver se o recurso desejado já foi fornecido. Caso contrário, ele carrega o recurso do arquivo apropriado . Esse arquivo deve ser chamadoprovide no nível superior para adicionar o recursofeatures ; se não o fizer, requiresinaliza um erro .

lunaryorn
fonte
Aceito para citar os documentos.
PythonNut
Incorpore aqui as informações da resposta de Gilles. Ou @Gilles, colocar essa resposta na sua também funcionaria.
precisa saber é o seguinte
13

Sim, desde que o código respeite helm.elou helm.elcrespeite a regra que ele deve chamar (provide 'helm). A chamada (provide 'helm)marca o símbolo helmcomo um recurso carregado e isso faz com que a segunda chamada (require 'helm)não faça nada.

Se o pacote carregado não chamar provide, requiresinaliza um erro e o recurso não está marcado como carregado. Portanto, uma segunda chamada (require 'helm)tentaria o carregamento novamente (e normalmente falharia novamente pelo mesmo motivo).

Gilles 'SO- parar de ser mau'
fonte
+1 Obrigado pela informação extra. Isso resolveu minha confusão depois de ler os documentos.
PythonNut