Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
以下不适用于 void 变量错误。应该用什么eval替换才能使其正常工作?
eval
;; -*- lexical-binding: t -*- (defun foo2 () (let ((b 'lkj)) (lambda () (eval 'b t)))) (funcall (foo2))
symbol-value也不起作用(如文档所述)。
symbol-value
按名称查找变量的值从根本上与正确的词法作用域不兼容,因为正确的词法作用域允许 alpha 重命名,即(始终)重命名变量不应该影响结果。
当然,如果你真的必须知道,你可以在某些情况下破解一些东西,比如:
(funcall `(closure ,(nth 1 <someclosure>) () <exp>))
<exp>它可能在与来自哪里的范围相同的范围内进行评估<someclosure>。<someclosure>如果是字节编译(或者如果我犯了错误),它将不起作用。
<exp>
<someclosure>