Dengan bantuan dari lunaryorn pada reddit , saya kira saya telah dapat memahami mengapa Anda mengamati perilaku "aneh".
Masalahnya adalah Anda mengutip ungkapan tersebut
'("foo" . (λ () (message "bar")))
Yang setara dengan formulir
(cons "foo" '(λ () (message "bar")))
Sekarang ketika emacs membuka file dengan ekstensi "foo", ia melakukan sesuatu seperti berikut ini
(funcall '(λ () (message "bar")))
Perhatikan kutipan tambahan, sebelumnya (λ, ini jelas bukan fungsi yang valid dan Anda mendapatkan kesalahan Invalid function: ...
Tapi mengapa ("foo" . (lambda () (message "bar")))berhasil, ini dijelaskan oleh pengamatan lunaryorn
"Daftar lambda", yaitu daftar yang mobilnya lambda, adalah fungsi yang valid juga
Begitu '(lambda () (message "bar"))juga fungsi yang valid, ini bisa diverifikasi dengan kode berikut
(functionp (lambda () "hello")) => t
(functionp (λ () "hello")) => t
(functionp '(lambda () "hello")) => t
(functionp '(λ () "hello")) => nil
Jadi solusinya adalah dengan tidak mengutip ekspresi gunakan yang berikut ini sebagai gantinya
(add-to-list 'auto-mode-alist (cons "foo" (λ () (bar))))
defalias, tetapi Anda mungkin ingin memeriksaprettify-symbols-mode, yang, antara lain, akan memungkinkan Anda untuk menampilkanlambdasebagaiλtanpa benar-benar mengubah teks yang mendasarinya.