оцените выражение, прежде чем оно будет помещено в лямбду

У меня есть следующая часть кода в моем .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")))

Очевидно, mode переменная является пустой, когда лямбда добирается для выполнения. Вопрос состоит в том, как я оцениваю mode таким способом, которым это не входит в лямбду как в переменную, а скорее как значение в той переменной? Другими словами, я хочу, чтобы сообщение было распечатано, когда рычаг выполняется.

5
задан Svante 16 July 2010 в 19:13
поделиться

1 ответ

Что вы можете использовать, так это 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")))))
10
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: