14 我的一个扩展程序中存在一个错误,最终导致该错误是由于set我没有按预期工作: ;; -*- lexical-binding: t -*- (let ((a nil)) (setq a t) (print a)) (let ((a nil)) (set 'a t) (print a)) 与emacs -Q --batch -l temp.el打印一起运行时: t nil 这对我来说似乎很奇怪。我的印象(setq a b)是速记(set 'a b)。这是怎么回事? elisp lexical-scoping setq — 牧羊人 source
14 这是记录的行为。Emacs 25.1 elisp手册中的(已大大改进)说明如下: 请注意,不同于与符号对象本身相关的动态变量,词汇变量和符号之间的关系仅存在于解释器(或编译器)中。因此,带有符号参数的函数(例如'symbol-value','boundp'和'set')只能检索或修改变量的动态绑定(即,其符号的值单元格的内容)。 C-hig (elisp) Lexical Binding — 菲尔 source