Quelle est la différence entre 'et #' devant un symbole?

22

Je suis un peu nouveau pour Emacs. En regardant certaines des configurations, j'ai trouvé qu'il y a deux types de commandes dans "add-hook".

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

et

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

Cela m'embrouille depuis longtemps et je ne sais pas comment rechercher "# '" dans google ...

Merci.

X.Arthur
la source
2
Désolé mon mauvais. Trouvé la réponse: stackoverflow.com/questions/2701698/…
X.Arthur
2
Les doublons sur d'autres sites sont très bien. Il y en a un ici, cependant, qui est presque un doublon. emacs.stackexchange.com/q/3595/50
Malabarba

Réponses:

21

Dans Emacs Lisp, si fooest un symbole, alors 'fooet #'foosont complètement équivalents. Cette dernière forme (avec #') est préférée lorsqu'elle fooest une fonction, car elle documente le fait qu'elle est destinée à être appelée.

Vos deux formes sont donc totalement équivalentes, et celle avec #'est préférée.

Edit : comme l'a souligné Malabarba, ce n'est pas tout à fait vrai: #'sur les symboles, le compilateur d'octets émettra un avertissement si la fonction n'est pas définie.

(Notez que ce n'est pas le cas pour les formes lambda, pour lesquelles plain '-compilateur d'octets ne compile pas la forme lambda, comme documenté ailleurs . Notez en outre que ce n'est pas nécessairement le cas dans d'autres dialectes Lisp, par exemple dans Common Lisp #'fooeffectue une liaison anticipée.)

jch
la source
À propos des avertissements. Quant aux lambdas, #'demande au compilateur de compiler le lambda, par opposition à la citation simple, qui ne le fait pas. J'ai reformulé de manière plus claire, je l'espère.
jch