emacs / elisp: สัญลักษณ์แฮช (ปอนด์, เครื่องหมายตัวเลข, อ็อกโททอร์ป) ใช้สำหรับอะไร?


102

สิ่งนี้ทำอะไร?

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

... และแตกต่างจาก

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

คำตอบ:


100

ไม่มีความแตกต่าง:

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

ผลตอบแทน t

#สามารถนำมาใช้ในด้านหน้าของlambdaการแสดงออกเพื่อแสดงให้ไบต์คอมไพเลอร์ที่นิพจน์ต่อไปนี้สามารถรวบรวมไบต์ดูเอกสารสำหรับฟังก์ชั่นที่ไม่เปิดเผยตัว แต่ไม่มีอะไรให้รวบรวมในกรณีของสัญลักษณ์

โดยทั่วไปจะใช้ในการแทนค่าที่พิมพ์พร้อมกับวงเล็บมุมซ้าย (<) เพื่อระบุว่าวัตถุที่พิมพ์เป็นคำอธิบาย (แต่ไม่สามารถอ่านได้) ตัวอย่างเช่น:

#<buffer foo.txt>

นอกจากนี้ยังใช้ในการสร้างโดยผู้อ่านเพื่อแสดงโครงสร้างแบบวงกลม ดูเอกสารสำหรับอ่านไวยากรณ์สำหรับวัตถุหนังสือเวียน

และแล้วคุณมีการใช้งานสำหรับ denoting ฐานจำนวนเต็ม#x2c -> 44เช่น

ยิ่งไปกว่านั้นฉันแน่ใจ


12
ตามบทความนี้เหตุผลที่ดีประการหนึ่งในการใช้#กับสัญลักษณ์เดียวคือการได้รับการวินิจฉัยในเวลารวบรวมหากสัญลักษณ์นั้นไม่ได้กำหนดไว้
ajk

3
ไม่เป็นความจริงที่ว่า "ไม่มีอะไรให้รวบรวมในกรณีของสัญลักษณ์" ไบต์คอมไพเลอร์ตีความ # 'car ว่าหมายถึง "ฉันมักอ้างถึงฟังก์ชัน` `foo' ไม่ใช่สัญลักษณ์ foo" จากนั้นมันอาจแทรกนิยามของ foo ในเอาต์พุตที่คอมไพล์เป็นไบต์ (แก้ไข: ไม่ผิดจริง ๆ แล้วสัญลักษณ์ # 'จะไม่ถูกคอมไพล์ที่แตกต่างจากสัญลักษณ์' - มันเป็นเพียงเครื่องหมายแสดงเจตนา)
โจนาธานโทเมอร์

11
บางทียังคงพูดถึงที่'symbolแสดงถึง(quote symbol)และ#'symbolแสดงถึง(function symbol)วากยสัมพันธ์
tripleee

27

รายการควรจะครอบคลุมสามารถพบได้ที่ด้านบนของดัชนีอ้างอิง Emacs เสียงกระเพื่อม

แก้ไข : หรือสะดวกยิ่งขึ้นจากภายใน Emacs เอง:

  • M-x info RET (เปิดเบราว์เซอร์ข้อมูล)

  • d m elisp RET (เปิดคู่มือ elisp)

  • I # RET(แสดงรายการ#ในดัชนี)


25

ฉันพบคำถามนี้ขณะค้นหาความหมายของแฮชในสิ่งที่ฉันพบขณะแฮ็คmode-line-format:

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

ซึ่งเป็นรูปแบบที่ใช้สำหรับคุณสมบัติข้อความในสตริงโดยที่:

  • "-%-"ข้อความที่จะ propertized: หนึ่งเส้นประและ-construct%ให้ผลในการ "พุ่งเพียงพอที่จะเติมเต็มส่วนที่เหลือของโหมดออนไลน์ที่" ส่งผลให้มีชื่อเสียง ------Emacs
  • 0อักขระตัวแรกที่ใช้คุณสมบัติข้อความ
  • 3อักขระสุดท้ายที่ใช้คุณสมบัติข้อความนั่นคือทั้ง"-%-"ตัว
  • (help-echo "...")คุณสมบัติและสตริงเป็นอาร์กิวเมนต์

สิ่งนี้สามารถสร้างได้ด้วยpropertizeฟังก์ชัน :

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

(แทรก (เหมาะสม "วางเมาส์เหนือฉัน!" "ช่วยสะท้อน" "ยินดีด้วย!"))

จะเหมือนกับ#("Hover over me!" 0 14 (help-echo "Congratulations!")):

ตัวอย่างเล็ก ๆ

หากคุณใช้โหมดล็อกแบบอักษรการใช้buffer-substringคำสั่งอาจทำให้เกิดสิ่งนี้:

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

คุณสามารถสร้างสิ่งที่ต้องการ:

แสดงฟังก์ชันที่เหมาะสมที่เหมาะสมสำหรับคุณสมบัติหลายรายการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.