Common lisp 什么';s";||&引用;代表

Common lisp 什么';s";||&引用;代表,common-lisp,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)))) 在Comm

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

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

  • foo
    :foo
    具有
    符号名
    “foo”
  • |临时文件|
    :|临时文件|
    具有
    符号名
    “临时文件”
  • |
    被命名为
    ”,是一个空字符串,否则无法生成该字符串
(此处的冒号具有关键字符号(关键字包中的符号)的通常含义,并且与条形图无关。)


|…|
在任务适合使用符号,但不适合使用根据常见Lisp约定命名的符号时非常有用。我可以想象,在这种情况下,文本“temp files”出现在程序的输出中的某个地方,或者用作文件名,或者在某些其他情况下,看到
temp-files
会很烦人。

公共Lisp允许符号名包含范围广泛的字符,例如
%
,这是大多数语言在标识符中不允许的。即使如此,有时程序员希望符号名包含超出正常允许范围的内容,例如OP示例中的
|temp files
中的单个空格。需要两个管道(
|
)字符来分隔此类符号的名称。此外,与不受限制的符号名称不同,此类管道分隔符号名称区分大小写。

|
是常见Lisp符号中的多转义字符:

? 'aaBBcc|DDeeFFgg|hhII|jjKK|LL

-> |AABBCCDDeeFFggHHIIjjKKLL|
竖条不需要环绕整个符号名称。它还可以转义符号的某些部分