Jaka jest różnica między „a #” przed symbolem?

22

Jestem trochę nowy w Emacsie. Przeglądając niektóre konfiguracje, zauważyłem, że w „add-hook” są dwa typy poleceń.

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

i

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

To mnie dezorientowało przez długi czas i nie wiem, jak wyszukiwać „#” w Google ...

Dzięki.

X.Arthur
źródło
2
Przepraszam moja wina. Znaleziono odpowiedź: stackoverflow.com/questions/2701698/...
X.Arthur
Zobacz także emacswiki.org/emacs/EmacsSymbolNotation
xuchunyang
2
Duplikaty na innych stronach są w porządku. Jest tu jednak jeden, który jest prawie duplikatem. emacs.stackexchange.com/q/3595/50
Malabarba

Odpowiedzi:

21

W Emacs Lisp, jeśli foojest symbolem, to 'fooi #'foosą całkowicie równoważne. Ta ostatnia forma (z #') jest preferowana, gdy foojest funkcją, ponieważ dokumentuje fakt, że ma ona być wywoływana.

Twoje dwie formy są zatem całkowicie równoważne, a ta z #'jest preferowana.

Edycja : jak wskazał Malabarba, nie jest to do końca prawdą: #'w przypadku symboli kompilator bajtów wyśle ​​ostrzeżenie, jeśli funkcja nie zostanie zdefiniowana.

(Zauważ, że nie dotyczy to form lambda, dla których zwykły 'uniemożliwia kompilatorowi bajtów kompilację formy lambda, jak udokumentowano w innym miejscu . Zauważ ponadto, że niekoniecznie dzieje się tak również w innych dialektach Lisp, na przykład w Common Lisp #'foowykonuje wczesne wiązanie).

jch
źródło
Prawo do ostrzeżeń. Jeśli chodzi o lambdas, #'instruuje kompilator, aby skompilował lambda, w przeciwieństwie do zwykłego cudzysłowu, co nie. Mam nadzieję, że sformułowałem sformułowanie w jaśniejszy sposób.
jch