"|...|"代表什么?

7
以下代码片段中的:|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个回答

10
在Common Lisp中,可以使用|...|引用符号名称中的字符;它可以转义通常不允许的字符,如空格,同时还禁用大小写转换。
  • foo:foo具有"FOO"symbol-name
  • |temp files|:|temp files|具有"temp files"symbol-name
  • ||被命名为"",即空字符串,否则无法产生
(这里的冒号具有关键字符号(在KEYWORD包中的符号)的通常含义,并且与竖线无关。) |...|在任务适合使用符号但不符合Common Lisp约定的情况下非常有用。我想在这种情况下,程序的输出中出现了文本“temp files”,或者用于文件名,或者其他一些情况,在这些情况下看到TEMP-FILES会很烦人。

4

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

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL

-> |AABBCCDDeeFFggHHIIjjKKLL|

竖线不需要包围整个符号名称,也可以转义符号的部分。


3

Common Lisp允许符号名称包含一系列的字符,如?%等,这是其他大多数编程语言中不允许在标识符中使用的。即使那样,有时候程序员希望符号名称包含与通常允许的不同的内容,比如OP示例中|temp files|中的单个空格。在这种情况下,需要使用两个管道符(|)来分隔该符号的名称。此外,这种用管道符分隔的符号名称区分大小写,而未分隔的符号名称则不区分大小写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接