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.


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


À 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.