2010-04-23 1 views

risposta

67

Non c'è alcuna differenza:

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

cede t

Il # può essere utilizzato di fronte a una lambda espressione che indica al byte-compilatore che il seguente exp ression può essere compilato in byte, vedere i documenti per Anonymous Functions. Ma non c'è niente da compilare nel caso di un simbolo.

In generale, viene utilizzato nello printed representation insieme alla parentesi angolare sinistra (<) per indicare che l'oggetto stampato è una descrizione (ma non può essere letto). Ad esempio:

#<buffer foo.txt> 

Viene anche utilizzato nei costrutti dal lettore per rappresentare strutture circolari. Vedi i documenti per Read Syntax for Circular Objects.

E quindi si ha il suo uso per denotare il base for integers, ad es. #x2c -> 44.

Più ne sono sicuro.

+2

Whoa, impressionante. L'enciclopedia emacs/elisp. – Cheeso

+9

Secondo [questo articolo] (http://endlessparentheses.com/get-in-the-habit-of-using-sharp-quote.html), un buon motivo per applicare '#' a un simbolo solitario è quello di ottenere la diagnostica in fase di compilazione se quel simbolo non è definito. – ajk

+2

Non è del tutto vero che "non c'è nulla da compilare nel caso di un simbolo". Il compilatore di byte interpreta # 'auto per dire "mi riferisco sempre alla funzione' pippo', non al simbolo pippo. " In questo modo, potrebbe in realtà incorporare la definizione di foo nell'output compilato in byte. (Modifica: no, è davvero sbagliato. Il simbolo # 'non verrà compilato in un byte in modo diverso da' simbolo - è solo un indicatore di intenti.) –

16

L'elenco dovrebbe essere disponibile nella parte superiore dello Emacs lisp reference index.

Edit: O anche più comodamente, dall'interno di Emacs stesso:

  • MxinfoRET (aprire il browser informazioni)

  • dmelispRET (aprire il manuale elisp)

  • ho#RET (elencare le voci per # nell'indice)

16

Ho trovato questa domanda durante la ricerca di ciò che l'hash significato in qualcosa che trovato durante l'hacking mode-line-format:

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

che è un formato utilizzato per text properties in strings whe re:

  • "-%-", testo da propertized: un trattino e un %-construct che si traduce in "trattini sufficiente per riempire il resto della linea mode", con conseguente famoso Emacs ------.
  • 0, il primo carattere su cui si applicano le proprietà del testo.
  • 3, l'ultimo carattere su cui si applicano le proprietà del testo, cioè tutta "-%-".
  • (help-echo "..."), una proprietà e una stringa come argomento.

Questo può essere creato con il propertize function:

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

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

sarebbe lo stesso di #("Hover over me!" 0 14 (help-echo "Congratulations!")): modalità di blocco carattere

Small example.

se si sta utilizzando , utilizzando il comando buffer-substring d potrebbe produrre qualcosa di simile:

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

così si potrebbe creare qualcosa di simile:

Showing the corresponding propertize function for multiple properties.