Was ist der Unterschied zwischen setq
und defvar
in Emacs Lispeln?
Unter /programming/3855862 wird die häufig verwendete lisp-Version derselben Frage angezeigt . Sind sie in Elisp gleich?
Was ist der Unterschied zwischen setq
und defvar
in Emacs Lispeln?
Unter /programming/3855862 wird die häufig verwendete lisp-Version derselben Frage angezeigt . Sind sie in Elisp gleich?
Antworten:
Sie sollten Emacs diese Frage stellen: C-h i
Wählen Sie das Elisp-Handbuch ( m Elisp
) und durchsuchen Sie den Index nach "defvar" ( i defvar
). Damit gelangen Sie zum Knoten Variablen definieren .
Emacs teilt Ihnen mit, defvar
dass das Anhängen einer Dokumentzeichenfolge erlaubt ist und dass, wenn die Variable bereits einen Wert hat, nichts unternommen wird .
Hier erfahren Sie auch über die Verwendung von defvar
mit keinem Wert zugewiesen werden: (defvar foo)
. Hiermit wird angegeben , dass die Variable für einen dynamischen Gültigkeitsbereich deklariert wird .
setq
hat keine dieser Eigenschaften.
defvar
und setq
sind ähnlich, aber nicht ganz gleich, in Emacs Lisp und Common Lisp.
defvar
es eine globale Variable (wie im imperativen Programmierstil) und eine Konvention zur Anpassung, während setq eher einer Let-Bindung in funktionalen Programmiersprachen gleicht (mit dynamischen / lexikalischen Gültigkeitsregeln, je nachdem, welcher globale Gültigkeitsmodus aktiv ist). .......)
setq
Legt einen var-Wert fest, unabhängig davon, ob das var (Vorkommen) lokal ist. defvar
deklariert eine Variable als global. (Es kann auch "buffer-local" sein:. local-variable-p
) Ein var-Vorkommen, das als Funktion arg oder durch let
"local" im üblichen Sinne gebunden ist. Wenn eine durch let
etc. gebundene Variable global (oder pufferlokal) ist, wird für die Dauer / den Umfang eine lokale Bindung (üblicher Sinn) dafür erstellt let
. Ändert innerhalb dieses Bindungsbereichs setq
den lokalen Wert. Es ist besser, von einem var- Vorkommen zu sprechen , das lokal (auf Stapel) oder global (auf Heap) ist, als von einem var.
M-x report-emacs-bug
, Verbesserungen vorzuschlagen, die anderen helfen könnten, es einfacher zu machen.