以下内容不适用于void variable error。应该eval
替换什么才能让它发挥作用?
;; -*- lexical-binding: t -*-
(defun foo2 ()
(let ((b 'lkj))
(lambda ()
(eval 'b t))))
(funcall (foo2))
symbol-value
也不起作用(如文件所述)。
答案 0 :(得分:3)
通过名称查找变量的值从根本上与正确的词法范围不兼容,因为正确的词法范围允许alpha重命名,即(一致地)重命名变量不应该影响结果。
当然,如果你真的必须知道,你可以在某些情况下解决问题,做如下事情:
(funcall `(closure ,(nth 1 <someclosure>) () <exp>))
可能会评估与<exp>
所在范围相同的范围内的<someclosure>
。如果<someclosure>
是字节编译的(或者我犯了错误),它将无效。