¿Cuál es la diferencia entre 'y #' delante de un símbolo?

22

Soy un poco nuevo en Emacs. Al mirar algunas de las configuraciones, descubrí que hay dos tipos de comando en "add-hook".

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

y

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

Esto me ha confundido durante mucho tiempo y no sé cómo buscar "# '" en Google ...

Gracias.

X.Arthur
fuente
2
Disculpa, me equivoque. Encontré la respuesta: stackoverflow.com/questions/2701698/…
X.Arthur
Ver también emacswiki.org/emacs/EmacsSymbolNotation
xuchunyang
2
Los duplicados en otros sitios están bien. Sin embargo, hay uno aquí, que es casi un duplicado. emacs.stackexchange.com/q/3595/50
Malabarba

Respuestas:

21

En Emacs Lisp, si fooes un símbolo, entonces 'fooy #'fooson completamente equivalentes. La última forma (con #') se prefiere cuando fooes una función, ya que documenta el hecho de que está destinada a ser llamada.

Por lo tanto, sus dos formas son completamente equivalentes, y #'se prefiere la que tiene.

Editar : como señaló Malabarba, esto no es del todo cierto: #'en los símbolos, el compilador de bytes emitirá una advertencia si la función no está definida.

(Tenga en cuenta que este no es el caso de las formas lambda, para lo cual, simplemente, 'evita que el compilador de bytes compile la forma lambda, como se documenta en otra parte . Tenga en cuenta además que este no es necesariamente el caso en otros dialectos de Lisp, por ejemplo en Common Lisp #'foorealiza la unión temprana).

jch
fuente
Correcto sobre advertencias. En cuanto a las lambdas, #'indica al compilador que compile la lambda, a diferencia de la cita simple, que no lo hace. Me he reformulado de una manera esperanzadora más clara.
jch