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
通常是合适的。问题是,不可能总是这样做。例如,假设您正在扩展一个不使用词法绑定的库。将文件转换为词法绑定
总是可能的,而且通常很容易。问题是,这并不总是可能的。例如,假设您正在扩展一个不使用词法绑定的库。将文件转换为词法绑定总是可能的,而且通常很容易。