2012-03-01 186 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| 

豎線不需要包圍整個符號名稱。它也可以逃避部分符號。