Was ist der Unterschied zwischen 'und #' vor einem Symbol?

22

Ich bin ein bisschen neu in Emacs. Bei der Betrachtung einiger Konfigurationen stellte ich fest, dass "add-hook" zwei Typen von Befehlen enthält.

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

und

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

Das hat mich lange verwirrt und ich weiß nicht, wie ich "# '" in Google suchen soll ...

Vielen Dank.

X.Arthur
quelle
2
Entschuldigung, mein fehler. Gefunden die Antwort: stackoverflow.com/questions/2701698/…
X.Arthur
2
Duplikate auf anderen Websites sind in Ordnung. Es gibt hier jedoch eine, die fast ein Duplikat ist. emacs.stackexchange.com/q/3595/50
Malabarba

Antworten:

21

Wenn in Emacs Lisp fooein Symbol ist, dann sind 'foound #'foovöllig gleichwertig. Die letztgenannte Form (mit #') wird bevorzugt, wenn fooes sich um eine Funktion handelt, da sie die Tatsache dokumentiert, dass sie zum Funktionieren bestimmt ist.

Ihre beiden Formen sind daher völlig gleichwertig, und die mit #'wird bevorzugt.

Bearbeiten : wie von Malabarba ausgeführt, ist dies nicht ganz richtig: #'bei Symbolen gibt der Byte-Compiler eine Warnung aus, wenn die Funktion nicht definiert ist.

(Beachten Sie, dass dies nicht bei Lambda-Formen der Fall ist, bei denen plain 'den Byte-Compiler daran hindert, die Lambda-Form zu kompilieren, wie an anderer Stelle dokumentiert . Beachten Sie außerdem, dass dies auch bei anderen Lisp-Dialekten nicht unbedingt der Fall ist, z. B. in Common Lisp #'fooführt eine frühe Bindung durch.)

jch
quelle
Recht auf Warnungen. In Bezug auf Lambdas #'weist der Compiler an, das Lambda zu kompilieren, im Gegensatz zu einfachen Anführungszeichen, die dies nicht tun. Ich habe es hoffentlich klarer formuliert.
26.