2012-03-01 9 views
5

Qual è il significato di :|temp files| nel seguente snippet di codice?Che cos'è "| ... |" stare per?

(defmethod acceptor-remove-session ((acceptor my-site-acceptor) (session t)) 
    (declare (ignore acceptor)) 
    (loop for path in (session-value :|temp files|) 
    do 
     (ignore-errors (delete-file path)))) 

risposta

9

In Common Lisp, |...| possono essere utilizzati per citare caratteri in un nome simbolo; può sfuggire a caratteri ordinariamente non consentiti come spazi e disabilita anche la conversione del caso.

  • foo o :foo avere la symbol-name di "FOO"
  • |temp files| o :|temp files| hanno la symbol-name di "temp files"
  • || è chiamato "", la stringa vuota, che altrimenti è impossibile produrre

(Il colon qui ha il solito significato di un simbolo di parola chiave (un simbolo nelPacchetto) ed è indipendente dalle barre.)

|...| è utile quando un'attività si presta all'uso di simboli, ma non di quelli definiti in base alle convenzioni di Common Lisp. Immagino che in questo caso il testo "file temporanei" si verifichi nell'output del programma da qualche parte, o sia usato per un nome file, o qualche altro caso in cui vedere TEMP-FILES sarebbe fastidioso.

3

Common Lisp consente ai nomi dei simboli di contenere un ampio intervallo di caratteri, ad esempio ? e %, che la maggior parte delle lingue non consentirebbe nei propri identificatori. Anche in questo caso, a volte un programmatore desidera che il nome di un simbolo contenga qualcosa oltre a ciò che è normalmente consentito, come lo spazio singolo in |temp files| nell'esempio dell'OP. Sono necessari due pipe (|) per delimitare il nome di tale simbolo. Inoltre, i nomi dei simboli delimitati da una pipe sono sensibili al maiuscolo/minuscolo, a differenza dei nomi di simboli non delimitati.

4

| è un carattere di escape multiplo in simboli Common Lisp:

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL 

-> |AABBCCDDeeFFggHHIIjjKKLL| 

La barra verticale non ha bisogno di circondare l'intero nome del simbolo. Può anche sfuggire a parti del simbolo.

Problemi correlati