什么是“| ...... |”代表?

时间:2012-03-01 02:36:37

标签: common-lisp

以下代码段中:|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))))

3 个答案:

答案 0 :(得分:9)

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

  • foo:foo拥有symbol-name "FOO"
  • |temp files|:|temp files|拥有symbol-name "temp files"
  • ||名为"",空字符串,否则无法生成

(这里的冒号具有关键字符号(KEYWORD包中的符号)的通常含义,并且与条形无关。)

当一个任务适合使用符号而不是根据Common Lisp约定命名的符号时,

|...|很有用。我想在这种情况下,文本“临时文件”出现在程序的输出某处,或者用于文件名,或者其他一些看起来TEMP-FILES会令人讨厌的情况。

答案 1 :(得分:4)

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

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL

-> |AABBCCDDeeFFggHHIIjjKKLL|

垂直条不需要包围整个符号名称。它也可以逃脱符号的一部分。

答案 2 :(得分:3)

Common Lisp允许符号名称包含大多数语言不允许使用的?%字符。即使这样,有时程序员也希望符号名称包含超出通常允许的内容,例如OP示例中|temp files|中的单个空格。需要两个管道(|)字符来分隔此类符号的名称。此外,这些以管道分隔的符号名称区分大小写,与不受限制的符号名称不同。