2012-03-01 198 views
5

在以下代码片段中,:|temp files|的含义是什么?什么是“| ... |”代表?

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

回答

9

Common Lisp中,|...|可用于引用在一个符号名字符;它可能会转义通常不允许的字符(如空格),并且还会禁用大小写转换。

  • foo:foo具有symbol-name"FOO"
  • |temp files|:|temp files|具有"temp files"
  • ||symbol-name名为"",空字符串,它是否则不可能产生

(这里的冒号具有通常意义上的关键字符号(0123中的符号)包),并且独立于条。)

|...|当任务适合使用符号而非按照Common Lisp约定命名时非常有用。我会想象在这种情况下,文本“临时文件”出现在某处的程序输出中,或用于文件名,或者其他一些看到TEMP-FILES会令人讨厌的情况。

3

的Common Lisp允许符号名称包含各种各样的字符,如?%,大多数语言将不会在他们的标识符允许。即使如此,有时程序员也希望符号名称包含超出通常允许的内容的内容,例如OP示例中的|temp files|中的单个空格。需要两个管道(|)字符来分隔这种符号的名称。另外,与非限制符号名称不同,这种由管道定界的符号名称区分大小写。

4

|是Common Lisp的符号多转义字符:

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL 

-> |AABBCCDDeeFFggHHIIjjKKLL| 

竖线不需要包围整个符号名称。它也可以逃避部分符号。