Respostas:
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
ou helm.elc
respeite a regra que ele deve chamar (provide 'helm)
. A chamada (provide 'helm)
marca o símbolo helm
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).