Digamos que eu precise associar símbolos a diretórios, e isso só precisará ser feito para um pequeno número de boundp
símbolos.
Na minha opinião, existem duas maneiras fáceis de fazer isso:
- Armazene essa associação em uma variável separada (alist ou um mapa de hash). Dessa forma, o diretório de cada símbolo estaria acessível com
(cdr (assq SYMBOL my-alist))
. - Armazene isso em uma propriedade de símbolo. Dessa forma, seria acessível com
(get SYMBOL 'my-directory)
.
Qual dessas seria a maneira idiomática de acompanhar essas informações?
(defvar s 5) (put 's 'd "c:/abc/") (let ((s 4)) (message "d: %s, val: %S" (get 's 'd) s))
. E OP: por que você fala de "funções", não de símbolos? Eu devo estar esquecendo alguma coisa.let
- vincular esse símbolo de seqüência de caracteres dir (que é usado como valor prop) não deve ser um problema. (Sinta-se livre para ignorar se não for pertinente.)Respostas:
Realmente depende dos casos de uso.
De um modo geral, as propriedades dos símbolos são recursos "de baixo nível" / "internos" e não se deve usá-los para itens de "nível de usuário". No entanto, há um lugar para tudo :-)
Alguns pontos que você pode querer considerar são:
nil
) do que com as propriedades do símbolo (itere sobreobarray
e elimine todas as propriedades relevantes de todos os símbolos).Outra opção que você pode querer considerar é
.dir-locals.el
.fonte
Desde que você use o nome canônico para o diretório, uma hashtable ou uma lista alista está funcionando. Se você espera que o usuário modifique ou inspecione os dados, use uma lista. Caso contrário, uma hashtable funciona melhor e será muito melhor.
fonte