emacs / elisp: Hash (pound, sayı işareti, octothorp) sembolü ne için kullanılır?


103

Bu ne yapar?

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

... ve bundan farklı mı

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

Yanıtlar:


101

Fark yok:

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

verim t

#Bir önünde kullanılabilecek lambdaaşağıdaki ifade bayt derlenmiş olabileceğini bayt derleyici belirten ifade, için dokümanlar bakınız Anonim Fonksiyonlar . Ancak bir sembol durumunda derlenecek hiçbir şey yok.

Genel olarak, yazdırılan nesnenin bir açıklama olduğunu (ancak okunamayacağını) belirtmek için sol açılı parantez (<) ile birlikte basılı sunumda kullanılır . Örneğin:

#<buffer foo.txt>

Ayrıca okuyucu tarafından dairesel yapıları temsil etmek için yapılarda kullanılır. Dairesel Nesneler için Okuma Sözdizimi belgelerine bakın .

Ve sonra tamsayıların tabanını belirtmek için kullanımına sahipsiniz , örneğin #x2c -> 44.

Artı daha çok eminim.


12
Bu makaleye göre , #yalnız bir sembole başvurmanın iyi bir nedeni, o sembol tanımlanmamışsa derleme zamanında tanı almaktır.
ajk

3
"Bir sembol durumunda derlenecek hiçbir şey olmadığı" tam olarak doğru değil. Bayt derleyicisi # 'car'ı "Ben her zaman foo işlevine değil, foo işlevine atıfta bulunuyorum" anlamına gelecek şekilde yorumlar. Daha sonra bayt-derlenmiş çıktıdaki foo tanımını satır içi yapabilir. (Düzenleme: hayır, bu aslında yanlış. # 'Sembolü bayt olarak' sembolünden farklı bir şekilde derlenmeyecek - sadece bir niyet göstergesi.)
Jonathan Tomer

11
Belki hala sözdizimsel olarak 'symboltemsil (quote symbol)ve #'symboltemsil ettiğinden bahsedin (function symbol).
üçlü

27

Kapsamlı olması gereken liste Emacs lisp referans indeksinin en üstünde bulunabilir .

Düzenleme : Ya da daha uygun bir şekilde, Emacs'in kendi içinden:

  • M-x info RET (bilgi tarayıcısını açın)

  • d m elisp RET (elisp kılavuzunu açın)

  • I # RET(için girişleri #dizinde listeleyin )


25

Hack yaparken bulduğum bir şeyde hash'in ne anlama geldiğini ararken bu soruyu buldum mode-line-format:

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

Bu, dizelerdeki metin özellikleri için kullanılan bir formattır , burada:

  • "-%-", uygun hale getirilecek metin: bir çizgi ve bir % -yapısı , "mod satırının geri kalanını doldurmaya yetecek çizgilerle" sonuçlanır ve ünlü Emacs ile sonuçlanır ------.
  • 0, metin özelliklerinin uygulandığı ilk karakter.
  • 3, metin özelliklerinin geçerli olduğu son karakter, yani tümü "-%-".
  • (help-echo "..."), bir özellik ve argüman olarak bir dize.

Bu, şu propertizeişlevle oluşturulabilir :

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

(("Fareyle üzerine gelin!" 'help-echo' "Tebrikler!" ifadesini uygun hale getirin))

şununla aynı olacaktır #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Küçük bir örnek.

Yazı tipi kilidi modunu kullanıyorsanız, buffer-substringkomutu kullanmak şuna benzer bir şey üretebilir:

(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))

Böylece şöyle bir şey yaratabilirsiniz:

Birden çok özellik için karşılık gelen uygun hale getirme işlevi gösteriliyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.