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)

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.


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)


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.