Я немного новичок в Emacs. Просматривая некоторые конфигурации, я обнаружил, что в «add-hook» есть команда двух типов.
(add-hook 'LaTeX-mode-hook #'LaTeX-math-mode)
а также
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)
Это смущало меня долгое время, и я не знаю, как искать "#" в Google ...
Благодарю.
Ответы:
В Emacs Lisp, если
foo
является символом, то'foo
и#'foo
полностью эквивалентны. Последняя форма (с#'
) предпочтительна, когдаfoo
является функцией, так как она документирует тот факт, что она предназначена для того, чтобы быть вызванной.Таким образом, ваши две формы полностью эквивалентны, и тот, который с
#'
предпочтительным.Редактировать : как указал Малабарба, это не совсем так:
#'
символы будут заставлять байт-компилятор выдавать предупреждение, если функция не определена.(Обратите внимание, что это не относится к лямбда-формам, для которых обычный
'
метод запрещает байт-компилятору компилировать лямбда-формы, как описано в другом месте . Отметим далее, что это также не обязательно имеет место в других диалектах Лисп, например, в Common Lisp#'foo
выполняет раннее связывание.)источник
#'
указывает компилятору компилировать лямбда- выражение, а не простую кавычку, которая этого не делает. Я переформулировал это, надеюсь, более четко.