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

Evg*_*pov 5 lisp emacs 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")))
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*son 10

您可以使用的是反引号:

(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")))))
Run Code Online (Sandbox Code Playgroud)