Похоже, @ тао-пенг сам нашел здесь ответ, но полная история такова:
Символ, созданный с помощью defvar
, обычно имеет только значение, которое ему задано, а также опционально список свойств, который, как правило, обычно имеет variable-documentation
или, возможно, risky-local-variable
, например ::100100
> (symbol-plist 'load-path)
(risky-local-variable t variable-documentation -587478)
С другой стороны, символ, созданный с помощью defcustom
, имеет гораздо более длинное symbol-plist
, включая свойство standard-value
, которое вы можете получить следующим образом:
> (get 'package-archives 'standard-value)
((quote (("gnu" . "http://elpa.gnu.org/packages/"))))
И, как отмечает @ trey-jackson, в случае символов, которые имеют локальные по буферу значения или локальные по кадрам значения, вы можете получить исходное значение с помощью:
> (setq foo "bar")
> (make-variable-buffer-local 'foo)
> (setq foo "baz")
> (default-value 'foo)
"bar"
> foo
"baz"