1
我知道Emacs 24引入了詞法作用域;這很棒,但我一直在進行詞彙範圍界定,我試圖從動態範圍界定的不同角度來看待。如何在Emacs lisp動態範圍內不關閉地工作
本來我只是做了我會一直做,依靠封閉:
(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是拉姆達運行時不確定後,我想出了這個給力P的評價在dolist的背景下,而不是在lambda運行時。
(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)))))))))
這是不用關閉和詞法範圍界定來解決問題的經典解決方案嗎?