Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在lambda表达式中取消引用符号?_Variables_Emacs_Elisp_Backquote - Fatal编程技术网

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

Variables 在lambda表达式中取消引用符号?,variables,emacs,elisp,backquote,Variables,Emacs,Elisp,Backquote,在匿名函数中,例如 (lambda () x) 如何用当前范围内的值替换符号x 我唯一能想到的就是 (eval `(lambda () ,x)) 但是我想知道是否还有其他方法。删除评估。只要`(lambda(),x) 返回列表(lambda()VAL-X),其中VAL-X是变量X的值。并且lambda列表由Emacs解释为一个函数。删除eval。只要`(lambda(),x) 返回列表(lambda()VAL-X),其中VAL-X是变量X的值。Emacs将lambda列表解释为一个函数。更好

在匿名函数中,例如

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

我唯一能想到的就是

(eval `(lambda () ,x))

但是我想知道是否还有其他方法。

删除
评估
。只要
`(lambda(),x)


返回列表
(lambda()VAL-X)
,其中
VAL-X
是变量
X
的值。并且lambda列表由Emacs解释为一个函数。

删除
eval
。只要
`(lambda(),x)


返回列表
(lambda()VAL-X)
,其中
VAL-X
是变量
X
的值。Emacs将lambda列表解释为一个函数。

更好的解决方案是添加

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

在文件的开头。完成后,只需编写
(lambda()x)
,因为Emacs将负责用围绕lambda的范围中的值替换
x
(即,将创建一个适当的闭包)。

更好的解决方案是添加

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

在文件的开头。完成后,只需编写
(lambda()x)
,因为Emacs将负责用围绕lambda的范围中的值替换
x
(即,将创建一个适当的闭包)。

如果
x
具有
(1 2)这样的值,这将很好地打嗝
@Stefan:我试着尽可能靠近OP。这将返回
(lambda()(12))
-无打嗝。如果您的意思是调用该函数时会打嗝,那么这是另一个问题(它也适用于OP)。如果
x
很可能是无法无误评估的东西,那么
,x
通常是合适的。如果
x
的值为
(12)
@Stefan,这将很高兴打嗝:我试图尽可能靠近OP。这将返回
(lambda()(12))
-无打嗝。如果您的意思是调用该函数时会打嗝,那么这是另一个问题(它也适用于OP)。如果
x
很可能是无法无误评估的东西,那么
,x
通常是合适的。问题是,不可能总是这样做。例如,假设您正在扩展一个不使用词法绑定的库。将文件转换为
词法绑定
总是可能的,而且通常很容易。问题是,这并不总是可能的。例如,假设您正在扩展一个不使用词法绑定的库。将文件转换为
词法绑定总是可能的,而且通常很容易。