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.