emacs / elisp: Do czego służy symbol krzyżyka (funt, znak liczby, oktotorp)?

103

Co to robi?

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

... i czy jest inny niż

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)
Ser
źródło

Odpowiedzi:

101

Nie ma różnicy:

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

plony t

#Mogą być stosowane przed lambdawyrażeniem wskazującym na bajt kompilatora, że poniższe wyrażenie może być bajt skompilowany, zobacz docs dla Anonimowych funkcji . Ale w przypadku symbolu nie ma nic do kompilacji.

Na ogół jest używany w drukowanej reprezentacji wraz z lewym nawiasem ostrym (<), aby wskazać, że drukowany obiekt jest opisem (ale nie można go odczytać). Na przykład:

#<buffer foo.txt>

Jest również używany w konstrukcjach przez czytelnika do reprezentowania struktur kołowych. Zobacz dokumentację dotyczącą składni odczytu dla obiektów kołowych .

A potem masz jego zastosowanie do oznaczania podstawy liczb całkowitych , np #x2c -> 44.

Na pewno więcej.

Trey Jackson
źródło
12
Zgodnie z tym artykułem dobrym powodem stosowania #pojedynczego symbolu jest uzyskanie diagnostyki w czasie kompilacji, jeśli ten symbol jest niezdefiniowany.
ajk
3
Nie jest do końca prawdą, że „w przypadku symbolu nie ma nic do kompilacji”. Kompilator bajtów interpretuje # 'car jako oznaczające "Zawsze odnoszę się do funkcji` foo', a nie do symbolu foo. " Może wtedy faktycznie wstawić definicję foo w wyniku kompilacji bajtowej. (Edycja: nie, to właściwie źle. Symbol # 'nie będzie kompilowany bajtowo inaczej niż symbol' - to tylko znak zamiaru.)
Jonathan Tomer
11
Być może nadal wspomnieć, że 'symbolreprezentuje (quote symbol)i #'symbolreprezentuje (function symbol)składniowo.
tripleee
27

Lista, która powinna być wyczerpująca, znajduje się na górze indeksu referencyjnego Emacs lisp .

Edycja : Lub jeszcze wygodniej, z poziomu samego Emacsa:

  • M-x info RET (otwórz przeglądarkę informacji)

  • d m elisp RET (otwórz instrukcję elisp)

  • I # RET(wymień wpisy #w indeksie)

phils
źródło
25

Znalazłem to pytanie, szukając, co oznacza skrót w czymś, co znalazłem podczas hakowania mode-line-format:

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

który jest formatem używanym do właściwości tekstu w ciągach, gdzie:

  • "-%-", tekst, który ma być propertized: jeden myślnik i konstrukcja%, która daje "kreski wystarczające do wypełnienia pozostałej części linii trybu", co daje słynny Emacs ------.
  • 0, pierwszy znak, do którego mają zastosowanie właściwości tekstu.
  • 3, ostatni znak, do którego mają zastosowanie właściwości tekstu, czyli cały "-%-".
  • (help-echo "..."), właściwość i ciąg znaków jako argument.

Można to utworzyć za pomocą propertizefunkcji :

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

(wstaw (propertize "Najedź na mnie!" 'help-echo' "Gratulacje!"))

byłby taki sam jak #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Mały przykład.

Jeśli używasz trybu blokady czcionek, użycie buffer-substringpolecenia może wywołać coś takiego:

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

Możesz więc stworzyć coś takiego:

Pokazywanie odpowiedniej funkcji propertize dla wielu właściwości.

Iceland_jack
źródło