emacs / elisp: Для чого використовується хеш (знак фунта, число, октоторп)?


102

Що це робить?

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

... і чи відрізняється він

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

Відповіді:


98

Немає різниці:

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

врожайність t

#Може бути використано в передній частині lambdaвиразу , яке вказує на байти-компілятор , що такий вираз може бути складено байтами, см документації для анонімних функцій . Але нічого не можна складати у випадку символу.

Взагалі він використовується у друкованому зображенні разом із лівою кутовою дужкою (<) для позначення того, що надрукований об'єкт - це опис (але його неможливо прочитати). Наприклад:

#<buffer foo.txt>

Він також використовується в конструкціях читача для представлення кругових структур. Дивіться документи про синтаксис читання для кругових об’єктів .

І тоді ви використовуєте його для позначення бази для цілих чисел , наприклад #x2c -> 44.

Плюс більше я впевнений.


12
Згідно з цією статтею , однією вагомою причиною звернення #до одинокого символу є отримання діагностики під час компіляції, якщо цей символ не визначений.
ajk

3
Не зовсім вірно, що "у випадку символу немає чого складати". Компілятор байтів інтерпретує # 'car означає "я завжди маю на увазі функцію` foo', а не символ foo. " Тоді воно може фактично вбудовувати визначення foo у складеному байтом висновку. (Редагувати: ні, це насправді неправильно. Символ № 'не буде складений байтом інакше, ніж' символ - це лише маркер наміру.)
Джонатан Томер

11
Можливо, все ж згадати, що 'symbolпредставляє (quote symbol)і #'symbolпредставляє (function symbol)синтаксично.
трійка

27

Список, який повинен бути всебічним, можна знайти у верхній частині референсного індексу Emacs lisp .

Редагувати : Або ще зручніше, зсередини самого 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."))

який формат використовується для властивостей тексту в рядках, де:

  • "-%-", текст, який потрібно впорядкувати: один тире та % -конструкція, що призводить до "тире, достатнього для заповнення залишків рядка режиму", в результаті чого з'явиться знаменитий 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))

Отже, ви можете створити щось на кшталт:

Показано відповідну функцію впорядкування для кількох властивостей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.