在 elisp 中隐藏一个全局变量

Shadow a global variable in elisp

首先我定义一个全局变量x:

ELISP> (defvar x (cons 1 3))
x
ELISP> x
(1 . 3)

经过一些操作,我想隐藏x并将其值重新赋值给5:

ELISP> (defvar x 5)
x
ELISP> x
(1 . 3)

但还是有原来的价值。如何隐藏全局变量?

如果变量已经定义,defvar 形式不会覆盖值。这样一来,即使在加载使用 defvar.

声明和使用 preference 的包之前,用户也可以在 .emacs 中说 (setq preference value)

如上所述,使用 setq 永久无条件地替换任何以前的值。

暂时覆盖一个值,请使用let

(let ((preference temp-value))
    ... code which needs to see temp-value ...)
;; previous global value is restored after the let form