2010-04-23 5 views

Répondre

67

Il n'y a pas de différence:

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

cède t

Le # peut être utilisé devant un lambda expression indiquant au byte-compilateur que l'exp suivante ression peut être compilé octet, voir la documentation pour Anonymous Functions. Mais il n'y a rien à compiler dans le cas d'un symbole.

En général, il est utilisé dans le printed representation avec l'angle 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 des constructions par le lecteur pour représenter des structures circulaires. Voir les documents pour Read Syntax for Circular Objects.

Et puis vous avez son utilisation pour désigner le base for integers, par exemple #x2c -> 44.

Plus plus je suis sûr.

+2

Whoa, impressionnant. L'encyclopédie emacs/elisp. – Cheeso

+9

Selon [cet article] (http://endlessparentheses.com/get-in-the-habit-of-using-sharp-quote.html), 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

+2

Il n'est pas tout à fait vrai que "il n'y a rien à compiler dans le cas d'un symbole". Le compilateur d'octets interprète # 'voiture pour signifier "Je me réfère toujours à la fonction' foo', pas au symbole foo. " Il peut alors réellement aligner la définition de foo dans la sortie octet-compilée. (Edit: Non, c'est faux. # Le symbole ne sera pas octet-compilé différemment de 'Symbol - c'est juste un marqueur d'intention.) –

16

La liste exhaustive devrait-être se trouve au sommet de la Emacs lisp reference index.

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

  • MxinfoRET (ouvrir le navigateur info)

  • dmelispRET (ouvrir le manuel de elisp)

  • Je#RET (liste des entrées pour # dans l'index)

16

Je trouve cette question lors de la recherche de ce que le hachage signifiait quelque chose que je trouvé tout 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 text properties in strings WHE re:

  • "-%-", texte à propertized: un tableau de bord et un %-construct qui se traduit par « tirets suffisante pour remplir le reste de la ligne de mode », ce qui dans le célèbre Emacs ------.
  • 0, le premier caractère sur lequel les propriétés du texte sont applicables.
  • 3, le dernier caractère sur lequel les propriétés du texte sont applicables, à savoir l'ensemble "-%-".
  • (help-echo "..."), une propriété et une chaîne comme argument.

Cela peut être créé avec le propertize function:

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

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

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

Small example.

Si vous utilisez le mode de verrouillage de la police , en utilisant le buffer-substring comman d pourrait 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)) 

Alors vous pouvez créer quelque chose comme:

Showing the corresponding propertize function for multiple properties.

Questions connexes