Apa perbedaan antara 'dan #' di depan simbol?

22

Saya sedikit baru untuk Emacs. Ketika melihat beberapa konfigurasi, saya menemukan ada dua jenis perintah di "add-hook".

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

dan

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

Ini telah membingungkan saya sejak lama dan saya tidak tahu cara mencari "# '" di google ...

Terima kasih.

X.Arthur
sumber
2
Maaf, salah saya. Ditemukan jawabannya: stackoverflow.com/questions/2701698/…
X.Arthur
2
Duplikat di situs lain baik-baik saja. Ada satu di sini, yang hampir merupakan duplikat. emacs.stackexchange.com/q/3595/50
Malabarba

Jawaban:

21

Dalam Emacs Lisp, if fooadalah simbol, maka 'foodan #'foosepenuhnya sama. Bentuk terakhir (dengan #') lebih disukai ketika foosuatu fungsi, karena mendokumentasikan fakta bahwa ia dimaksudkan untuk berfungsi.

Oleh karena itu dua bentuk Anda sepenuhnya sama, dan yang satu #'lebih disukai.

Sunting : seperti yang ditunjukkan oleh Malabarba, ini tidak sepenuhnya benar: #'pada simbol akan menyebabkan byte-compiler mengeluarkan peringatan jika fungsi tidak didefinisikan.

(Perhatikan bahwa ini bukan kasus untuk lambda-bentuk, yang polos 'mencegah byte-compiler dari mengkompilasi bentuk lambda, seperti yang didokumentasikan di tempat lain . Perhatikan lebih lanjut bahwa ini juga tidak harus terjadi dalam dialek Lisp lain, misalnya dalam Lisp umum #'foomelakukan pengikatan awal.)

jch
sumber
Benar tentang peringatan. Mengenai lambdas, #'perintahkan kompiler untuk mengkompilasi lambda, sebagai lawan dari kutipan polos, yang tidak. Saya telah memformulasikannya kembali dengan cara yang lebih mudah.
jch