Яка різниця між символом "і #" перед символом?


22

Я трохи новачок у Emacs. Переглядаючи деякі конфігурації, я виявив, що в команді "add-hock" є команда двох типів.

(add-hook 'LaTeX-mode-hook #'LaTeX-math-mode)

і

(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

Це мене давно бентежить, і я не знаю, як шукати "#" "в Google ...

Спасибі.


2
Вибач, моя погана. Знайдено відповідь: stackoverflow.com/questions/2701698 / ...
X.Arthur


2
Дублікати на інших сайтах чудово. Тут є одна, яка майже копія. emacs.stackexchange.com/q/3595/50
Малабарба

Відповіді:


21

У Emacs Lisp, якщо fooце символ, то 'fooі #'fooє абсолютно рівнозначними. Остання форма (з #') є кращою, коли fooє функцією, оскільки вона документує той факт, що вона призначена для функціонування.

Отже, ваші дві форми є абсолютно рівнозначними, а одна з #'кращим.

Редагувати : як вказував Малабарба, це не зовсім вірно: #'символи примусять компілятор байтів видавати попередження, якщо функція не визначена.

(Зауважте, що це не стосується лямбда-форм, для яких звичайна 'перешкоджає компілятору байт складати лямбда-форму, як це зафіксовано в інших місцях . Зауважте також, що це також необов'язково має місце в інших діалектах Lisp, наприклад у Звичайний Лісп #'fooвиконує раннє зв'язування.)


Правильно про попередження. Що стосується лямбда, то #'доручає компілятору скласти лямбда, на відміну від простої цитати, яка цього не робить. Я переформулював сподіваючись ясніше.
jch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.