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.


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.)


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.