以下は void 変数エラーで動作しません。これを機能させるには、何をeval
置き換える必要がありますか?
;; -*- lexical-binding: t -*-
(defun foo2 ()
(let ((b 'lkj))
(lambda ()
(eval 'b t))))
(funcall (foo2))
symbol-value
どちらも機能しません(文書化されているとおり)。
変数の値を名前で検索することは、適切な字句スコープと基本的に互換性がありません。適切な字句スコープでは、アルファの名前変更が許可されているためです。つまり、(一貫して) 変数の名前を変更しても結果に影響を与えるべきではありません。
もちろん、本当に知る必要がある場合は、場合によっては次のようなことをハッキングできます。
(funcall `(closure ,(nth 1 <someclosure>) () <exp>))
<exp>
どこから来たものと同じスコープで評価される可能性があり<someclosure>
ます。<someclosure>
バイトコンパイルされた場合(または私が間違えた場合)は機能しません。