Digamos que necesito asociar símbolos con directorios, y esto solo tendrá que hacerse para una pequeña cantidad de boundp
símbolos.
A mi modo de ver, hay dos maneras fáciles de hacerlo:
- Almacene esta asociación en una variable separada (lista o un mapa hash). De esta manera, el directorio de cada símbolo sería accesible con
(cdr (assq SYMBOL my-alist))
. - Almacene esto en una propiedad de símbolo. De esta manera, sería accesible con
(get SYMBOL 'my-directory)
.
¿Cuál de estas sería la forma idiomática de hacer un seguimiento de esta información?
(defvar s 5) (put 's 'd "c:/abc/") (let ((s 4)) (message "d: %s, val: %S" (get 's 'd) s))
. Y OP: ¿por qué hablas de "funciones", no de símbolos? Debo estar perdiendo algo.let
-vincular ese símbolo de cadena de directorios (que se usa como valor de apoyo) no debería ser un problema. (Siéntase libre de ignorar si no es pertinente.)Respuestas:
Realmente depende de los casos de uso.
En términos generales, las propiedades de los símbolos son características de "bajo nivel" / "internas" y no se deben usar para cosas de "nivel de usuario". Sin embargo, hay un lugar para todo :-)
Algunos puntos que puede considerar son:
nil
) que con las propiedades del símbolo (iterar sobreobarray
y eliminar todas las propiedades relevantes de todos los símbolos).Otra opción que es posible que desee considerar es
.dir-locals.el
.fuente
Siempre que use el nombre canónico para el directorio, una tabla hash o una lista son funcionales. Si espera que el usuario modifique o inspeccione los datos, use una lista. De lo contrario, una tabla hash funciona mejor y escalará mucho mejor.
fuente