emacs:按名称获取词法绑定变量值

时间:2013-05-04 18:19:22

标签: emacs elisp

以下内容不适用于void variable error。应该eval替换什么才能让它发挥作用?

;; -*- lexical-binding: t -*-
(defun foo2 ()
  (let ((b 'lkj))
    (lambda ()
      (eval 'b t))))

(funcall (foo2))

symbol-value也不起作用(如文件所述)。

1 个答案:

答案 0 :(得分:3)

通过名称查找变量的值从根本上与正确的词法范围不兼容,因为正确的词法范围允许alpha重命名,即(一致地)重命名变量不应该影响结果。

当然,如果你真的必须知道,你可以在某些情况下解决问题,做如下事情:

(funcall `(closure ,(nth 1 <someclosure>) () <exp>))

可能会评估与<exp>所在范围相同的范围内的<someclosure>。如果<someclosure>是字节编译的(或者我犯了错误),它将无效。