emacs / elisp: Untuk apa simbol hash (pound, number sign, octothorp)?

102

Apa fungsinya?

(add-hook 'compilation-mode-hook #'my-setup-compile-mode)

... dan apakah itu berbeda dari

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)
Cheeso
sumber

Jawaban:

98

Tidak ada perbedaan:

(eq 'my-add #'my-add)

hasil t

The #dapat digunakan di depan sebuah lambdaekspresi yang menunjukkan ke byte-compiler bahwa ekspresi berikut dapat byte dikompilasi, lihat dokumentasi untuk Fungsi Anonymous . Tapi tidak ada yang bisa dikompilasi dalam kasus simbol.

Secara umum, ini digunakan dalam representasi yang dicetak bersama dengan braket sudut kiri (<) untuk menunjukkan bahwa objek yang dicetak adalah deskripsi (tetapi tidak dapat dibaca). Sebagai contoh:

#<buffer foo.txt>

Ini juga digunakan dalam konstruksi oleh pembaca untuk mewakili struktur melingkar. Lihat dokumen untuk Sintaks Baca untuk Objek Edaran .

Dan kemudian Anda memiliki penggunaannya untuk menunjukkan basis untuk bilangan bulat , misalnya #x2c -> 44.

Ditambah lagi saya yakin.

Trey Jackson
sumber
12
Menurut artikel ini , salah satu alasan bagus untuk menerapkan #simbol tunggal adalah untuk mendapatkan diagnosis pada waktu kompilasi jika simbol itu tidak ditentukan.
ajk
3
Tidak sepenuhnya benar bahwa "tidak ada yang perlu dikompilasi dalam kasus simbol." Kompilator byte mengartikan # 'car sebagai "Saya selalu mengacu pada fungsi` foo', bukan simbol foo. " Ini kemudian mungkin benar-benar menyebariskan definisi foo dalam output yang dikompilasi byte. (Sunting: tidak, itu sebenarnya salah. Simbol # 'tidak akan dikompilasi byte secara berbeda dari simbol' - itu hanya penanda niat.)
Jonathan Tomer
11
Mungkin masih menyebutkan yang 'symbolmerepresentasikan (quote symbol)dan #'symbolmerepresentasikan secara (function symbol)sintaksis.
tripleee
27

Daftar harus-komprehensif dapat ditemukan di bagian atas indeks referensi cadel Emacs .

Sunting : Atau bahkan lebih nyaman, dari dalam Emacs itu sendiri:

  • M-x info RET (buka browser info)

  • d m elisp RET (buka manual elisp)

  • I # RET(daftar entri untuk #di indeks)

phils
sumber
25

Saya menemukan pertanyaan ini saat mencari apa arti hash dalam sesuatu yang saya temukan saat meretas mode-line-format:

#("-%-" 0 3
  (help-echo "Display as tooltip when mouse hovers or with display-local-help."))

yang merupakan format yang digunakan untuk properti teks dalam string di mana:

  • "-%-", teks yang akan diberi properti: satu tanda hubung dan % -konstruksi yang menghasilkan "tanda hubung yang cukup untuk mengisi sisa baris mode", menghasilkan Emacs yang terkenal ------.
  • 0, karakter pertama yang menerapkan properti teks.
  • 3, karakter terakhir yang diterapkan properti teks, yaitu keseluruhan "-%-".
  • (help-echo "..."), properti dan string sebagai argumennya.

Ini dapat dibuat dengan propertizefungsi :

(propertize "Hover over me!" 'help-echo '"congratulations!")

(masukkan (properti "Arahkan kursor ke saya!" 'help-echo' "Selamat!"))

akan sama dengan #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Contoh kecil.

Jika Anda menggunakan mode kunci font, menggunakan buffer-substringperintah mungkin menghasilkan sesuatu seperti ini:

(buffer-substring 1 28) ; First 27 characters in the current buffer
  #(";; This buffer is for notes"
     0 3
     (fontified t face font-lock-comment-delimiter-face)
     3 27
     (fontified t face font-lock-comment-face))

Jadi Anda bisa membuat sesuatu seperti:

Menampilkan fungsi properti yang sesuai untuk beberapa properti.

Iceland_jack
sumber