Qual é a diferença entre 'e #' na frente de um símbolo?

22

Sou um pouco novo no Emacs. Ao analisar algumas das configurações, descobri que existem dois tipos de comando no "add-hook".

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

e

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

Isso me confundiu há muito tempo e eu não sei como pesquisar "# '" no google ...

Obrigado.

X.Arthur
fonte
2
Desculpe, minha culpa. Encontrei a resposta: stackoverflow.com/questions/2701698/…
X.Arthur
Veja também emacswiki.org/emacs/EmacsSymbolNotation
xuchunyang
2
Duplicatas em outros sites são boas. Há um aqui, porém, que é quase uma duplicata. emacs.stackexchange.com/q/3595/50
Malabarba

Respostas:

21

No Emacs Lisp, se fooé um símbolo, então 'fooe #'fooé completamente equivalente. A última forma (com #') é preferida quando fooé uma função, pois documenta o fato de que se destina a ser funcionalizada.

Suas duas formas são, portanto, completamente equivalentes e a que #'é preferida.

Edit : como apontado por Malabarba, isso não é bem verdade: #'nos símbolos, o byte-compiler emitirá um aviso se a função não estiver definida.

(Observe que este não é o caso das formas lambda, para as quais a planície 'impede que o compilador de bytes compile a forma lambda, conforme documentado em outro lugar . Observe também que esse também não é necessariamente o caso em outros dialetos Lisp, por exemplo, em O Lisp comum #'fooexecuta ligação antecipada.)

jch
fonte
Certo sobre avisos. Quanto aos lambdas, #'instrui o compilador a compilar o lambda, em vez de aspas simples, o que não acontece. Eu reformulei de uma maneira esperançosamente mais clara.
JCH