2012-03-01 7 views
5

¿Cuál es el significado de :|temp files| en el siguiente fragmento de código?¿Qué es "| ... |" ¿representar?

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

Respuesta

9

En Common Lisp, |...| pueden utilizarse para citar caracteres en un nombre de símbolo; puede escapar de los caracteres normalmente no permitidos, como espacios, y también deshabilita la conversión de mayúsculas y minúsculas.

  • foo o :foo tener la symbol-name de "FOO"
  • |temp files| o :|temp files| tienen la symbol-name de "temp files"
  • || se llama "", la cadena vacía, por lo demás imposible producir

(Los dos puntos aquí tienen el significado habitual de un símbolo de palabra clave (un símbolo en el KEYWORD paquete) y es independiente de las barras.)

|...| es útil cuando una tarea se presta para el uso de símbolos, pero no los nombres de acuerdo con las convenciones de Common Lisp. Me imagino que en este caso el texto "archivos temporales" ocurre en la salida del programa en alguna parte, o se usa para un nombre de archivo, o en algún otro caso donde ver TEMP-FILES sería molesto.

3

Common Lisp permite que los nombres de símbolos contengan una amplia gama de caracteres, como ? y %, que la mayoría de los idiomas no permiten en sus identificadores. Incluso entonces, a veces un programador quiere que un nombre de símbolo contenga algo más allá de lo que normalmente está permitido, como el espacio único en |temp files| en el ejemplo del PO. Se requieren dos caracteres de tubería (|) para delimitar el nombre de dicho símbolo. Además, estos nombres de símbolos delimitados por tuberías distinguen entre mayúsculas y minúsculas, a diferencia de los nombres de símbolos no delimitados.

4

| es un carácter de escape múltiple en símbolos de Common Lisp:

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL 

-> |AABBCCDDeeFFggHHIIjjKKLL| 

La barra vertical no tiene que rodear todo el nombre del símbolo. También puede escapar partes del símbolo.

Cuestiones relacionadas