在将表达式放入lambda之前对其进行求值

时间:2010-07-16 14:29:05

标签: emacs lisp elisp

我的.emacs中有以下代码:

(dolist (mode '(scheme emacs-lisp lisp clojure))
  (add-hook
   (intern (concat (symbol-name mode) "-mode-hook"))
   (lambda ()
     (progn
        (run-programming-hook)
        (message "%s" (concat (symbol-name mode) "-mode")))

当lambda执行时,mode变量显然是无效的。问题是我如何以这样的方式评估mode,它不会将lambda作为变量而是作为该变量中的值进入?换句话说,我想在挂钩运行时打印消息。

1 个答案:

答案 0 :(得分:10)

您可以使用的是backquote

(dolist (mode '(scheme emacs-lisp lisp clojure))
  (add-hook
   (intern (concat (symbol-name mode) "-mode-hook"))
   `(lambda ()
       (run-programming-hook)
       (message "%s" ,(concat (symbol-name mode) "-mode")))))