Angenommen, ich muss Verzeichnissen Symbole zuordnen, und dies muss nur für eine kleine Anzahl von boundp
Symbolen durchgeführt werden.
So wie ich das sehe, gibt es zwei einfache Möglichkeiten, dies zu tun:
- Speichern Sie diese Zuordnung in einer separaten Variablen (Alist oder Hash-Map). Auf diese Weise wäre das Verzeichnis jedes Symbols mit zugänglich
(cdr (assq SYMBOL my-alist))
. - Speichern Sie dies in einer Symboleigenschaft. Auf diese Weise wäre es mit zugänglich
(get SYMBOL 'my-directory)
.
Welche davon wäre die idiomatische Methode, um diese Informationen im Auge zu behalten?
(defvar s 5) (put 's 'd "c:/abc/") (let ((s 4)) (message "d: %s, val: %S" (get 's 'd) s))
. Und OP: Warum sprechen Sie von "Funktionen", nicht von Symbolen? Mir muss etwas fehlen.let
-Das Binden des Dir-String-Symbols (das als Requisitenwert verwendet wird) sollte kein Problem sein. (Fühlen Sie sich frei zu ignorieren, wenn nicht relevant.)Antworten:
Es kommt wirklich auf die Anwendungsfälle an.
Im Allgemeinen handelt es sich bei Symboleigenschaften um "Low-Level" / "interne" Funktionen, und man sollte sie nicht für "User-Level" verwenden. Es gibt jedoch Platz für alles :-)
Einige Punkte, die Sie berücksichtigen sollten, sind:
nil
) zurückzusetzen (dh alle Überreste Ihres Pakets zu entfernen) als mit Symboleigenschaften (iterieren Sie überobarray
und entfernen Sie alle relevanten Eigenschaften aus allen Symbolen).Eine weitere Option, die Sie möglicherweise in Betracht ziehen möchten, ist
.dir-locals.el
.quelle
Solange Sie den kanonischen Namen für das Verzeichnis verwenden, ist entweder eine Hashtabelle oder eine Liste funktionsfähig. Wenn Sie erwarten, dass der Benutzer die Daten ändert oder überprüft, verwenden Sie eine Liste. Andernfalls funktioniert eine Hashtabelle am besten und lässt sich viel besser skalieren.
quelle