emacs / elisp: A quoi sert le symbole dièse (dièse, signe dièse, octothorp)?

102

Qu'est-ce que cela fait?

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

... et est-ce différent de

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

Réponses:

100

Il n'y a pas de différence:

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

rendements t

Le #peut être utilisé devant une lambdaexpression indiquant au compilateur d'octets que l'expression suivante peut être compilée en octets, consultez la documentation sur les fonctions anonymes . Mais il n'y a rien à compiler dans le cas d'un symbole.

En général, il est utilisé dans la représentation imprimée avec le crochet angulaire gauche (<) pour indiquer que l'objet imprimé est une description (mais ne peut pas être lu). Par exemple:

#<buffer foo.txt>

Il est également utilisé dans les constructions par le lecteur pour représenter des structures circulaires. Consultez la documentation relative à la syntaxe de lecture des objets circulaires .

Et puis vous avez son utilisation pour désigner la base des nombres entiers , par exemple #x2c -> 44.

De plus, j'en suis sûr.

Trey Jackson
la source
12
Selon cet article , une bonne raison d'appliquer #à un symbole isolé est d'obtenir des diagnostics au moment de la compilation si ce symbole n'est pas défini.
ajk
3
Ce n'est pas tout à fait vrai qu '"il n'y a rien à compiler dans le cas d'un symbole". Le compilateur d'octets interprète # 'car comme signifiant "Je fais toujours référence à la fonction` foo', pas au symbole foo. " Il peut alors en fait intégrer la définition de foo dans la sortie compilée par octets. (Edit: non, c'est en fait faux. Le symbole # 'ne sera pas compilé par octet différemment du symbole' - c'est juste un marqueur d'intention.)
Jonathan Tomer
11
Peut-être encore mentionner que 'symbolreprésente (quote symbol)et #'symbolreprésente (function symbol)syntaxiquement.
tripleee
27

La liste devrait être complète se trouve en haut de l' index de référence Emacs lisp .

Edit : Ou encore plus commodément, depuis Emacs lui-même:

  • M-x info RET (ouvrez le navigateur d'informations)

  • d m elisp RET (ouvrir le manuel elisp)

  • I # RET(lister les entrées pour #dans l'index)

phils
la source
25

J'ai trouvé cette question en cherchant ce que le hachage signifiait dans quelque chose que j'ai trouvé lors du piratage mode-line-format:

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

qui est un format utilisé pour les propriétés de texte dans les chaînes où:

  • "-%-", texte à posséder: un tiret et une % -construct qui se traduit par "des tirets suffisants pour remplir le reste de la ligne de mode", aboutissant au fameux Emacs ------.
  • 0, le premier caractère auquel s'appliquent les propriétés de texte.
  • 3, le dernier caractère sur lequel s'appliquent les propriétés du texte, c'est -à- dire le tout "-%-".
  • (help-echo "..."), une propriété et une chaîne comme argument.

Cela peut être créé avec la propertizefonction :

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

(insert (propertize "Hover over me!" "help-echo" "Félicitations!"))

serait le même que #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Petit exemple.

Si vous utilisez le mode de verrouillage de police, l'utilisation de la buffer-substringcommande peut produire quelque chose comme ceci:

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

Vous pouvez donc créer quelque chose comme:

Affichage de la fonction de propriété correspondante pour plusieurs propriétés.

Iceland_jack
la source