为什么setq和set quote在具有词法作用域的让界变量上有不同的作用?


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)。这是怎么回事?

Answers:


14

这是记录的行为。Emacs 25.1 elisp手册中的(已大大改进)说明如下:

请注意,不同于与符号对象本身相关的动态变量,词汇变量和符号之间的关系仅存在于解释器(或编译器)中。因此,带有符号参数的函数(例如'symbol-value','boundp'和'set')只能检索或修改变量的动态绑定(即,其符号的值单元格的内容)。

C-hig (elisp) Lexical Binding

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.