É require
idempotent? ie fazer
(require 'helm)
e
(require 'helm)
(require 'helm)
terminar com o mesmo resultado?
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
require
com o nome do recurso como argumento.require
procura na variável globalfeatures
para 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,require
sinaliza um erro .
Sim, desde que o código respeite
helm.el
ouhelm.elc
respeite a regra que ele deve chamar(provide 'helm)
. A chamada(provide 'helm)
marca o símbolohelm
como 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
,require
sinaliza 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).fonte