Emacs 24 で字句スコープが導入されたことは知っています。それは素晴らしいことですが、私は常に字句スコープを使用しており、動的スコープを使用して別の視点から見ようとしています。
もともと私はいつもしていることをしただけで、閉鎖に頼っています:
(add-hook 'cider-mode-hook
(lambda ()
(dolist (p '(("M-l" . cider-load-current-buffer)
("M-e" . cider-eval-last-expression)))
(local-set-key
(kbd (car p))
(lambda () (interactive) (save-buffer) (cdr p))))))
ラムダの実行時に p が未定義である理由を最終的に理解した後、ラムダの実行時ではなく dolist のコンテキストで p の評価を強制するために、これを思い付きました。
(add-hook 'cider-mode-hook
(lambda ()
(dolist (p '(("M-l" . cider-load-current-buffer)
("M-e" . cider-eval-last-expression)))
(local-set-key
(kbd (car p))
(cons 'lambda `(() (interactive) (save-buffer) (funcall (quote ,(cdr p)))))))))
これは、クロージャーと字句スコープなしで問題を解決するための古典的な解決策ですか?