Qual è la differenza tra 'e #' davanti a un simbolo?


22

Sono un po 'nuovo di Emacs. Guardando alcune delle configurazioni, ho scoperto che ci sono due tipi di comando in "add-hook".

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

e

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

Questo mi ha confuso per molto tempo e non so come cercare "#" in Google ...

Grazie.


2
Scusa colpa mia. Trovato la risposta: stackoverflow.com/questions/2701698/...
X.Arthur


2
I duplicati su altri siti vanno bene. Ce n'è uno qui, che è quasi un duplicato. emacs.stackexchange.com/q/3595/50
Malabarba

Risposte:


21

In Emacs Lisp, se fooè un simbolo, allora 'fooe #'foosono completamente equivalenti. Quest'ultima forma (con #') è preferita quando fooè una funzione, in quanto documenta il fatto che deve essere funzionata.

Le tue due forme sono quindi completamente equivalenti e quella con #'è preferita.

Modifica : come sottolineato da Malabarba, questo non è del tutto vero: i #'simboli on causeranno al compilatore di byte di emettere un avviso se la funzione non è definita.

(Si noti che questo non è il caso dei moduli lambda, per i quali plain 'impedisce al compilatore di byte di compilare il modulo lambda, come documentato altrove . Si noti inoltre che questo non è necessariamente il caso in altri dialetti Lisp, ad esempio in Common Lisp #'fooesegue il binding anticipato.)


Proprio sugli avvertimenti. Per quanto riguarda lambdas, #'incarica il compilatore di compilare la lambda, al contrario della semplice citazione, che non lo fa. Ho riformulato in modo sperabilmente più chiaro.
dal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.