在 lambda 表达式中取消引用符号?

Unquote symbol in lambda expression?

在匿名函数中,例如

(lambda () x)

如何用当前范围内的值替换符号 x

我唯一能想到的就是

(eval `(lambda () ,x))

但是不知道有没有别的办法

删除 eval。就 `(lambda () ,x).

即returns列表(lambda () VAL-X),其中VAL-X是变量x的值。 Emacs 将 lambda 列表解释为函数。

更好的解决方案是添加

;; -*- lexical-binding:t -*-

在文件的开头。完成后,只需要编写 (lambda () x) 即可,因为 Emacs 随后会负责将 x 替换为来自该 lambda 周围范围的值(即,将创建一个适当的闭包)。