在 Emacs Lisp 中,是否有一个函数可以获取由 defvar
初始化的符号的初始值? ?喜欢 some-function
如下图:
(defvar var "initial value")
(setq var "changed value")
(some-function 'var)
=> "inital value"
最佳答案
这通常是不可能的(Emacs 不记得原始值),但也有一些异常(exception)。defcustom
变量
用 defcustom
定义的变量和自定义系统修改得到原始值、保存值和自定义但尚未保存的值作为属性:
(defcustom foo 0 "testing")
(custom-set-variables '(foo 1))
(setq foo 2)
(customize-mark-as-set 'foo)
(setq foo 3)
(car (get 'foo 'standard-value)) ;; evaluates to 0
(car (get 'foo 'saved-value)) ;; evaluates to 1
(car (get 'foo 'customized-value)) ;; evaluates to 2
foo ;; evaluates to 3
见 Defining Customization Variables elisp 手册中的部分,特别是
custom-reevaluate-setting
文档上方的讨论功能。缓冲区局部变量
缓冲区局部变量具有默认(全局)值和可能与全局值不同的缓冲区局部值。您可以使用
default-value
获取默认值的函数:(setq indent-tabs-mode nil)
(default-value 'indent-tabs-mode) ;; evaluates to t
但是,可以更改默认值,并且 Emacs 不会记住原始默认值:
(set-default 'indent-tabs-mode nil)
(default-value 'indent-tabs-mode) ;; evaluates to nil
见 Introduction to Buffer-Local Variables有关详细信息,请参阅elisp 手册中的部分。
关于emacs - 如何在 Elisp 中获取变量的初始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806423/