2012-08-06 34 views
0

我想要一個動態的方式告訴FORMAT根據在實際調用之前設置的某個全局變量放棄輸出。我認爲將t更改爲nil應該達成協議,但我並不滿意,因爲在返回的字符串可能被混淆爲實際返回值的任何時候,我將無法使用那些FORMAT調用。如何正確告訴FORMAT丟棄輸入

例如:

告訴FORMAT到輸出上TERMINAL-10(正常工作)

(let ((*the-var* t)) 
    (FORMAT *the-var* "some text") 
    #|do some other stuff|#) 
->"some-text" 
->'return-value' 

告訴FORMAT丟棄輸出(正常工作)

(let ((*the-var* nil)) 
    (FORMAT *the-var* "some text") 
    #|do some other stuff|#) 
->'return-value' 

告訴FORMAT丟棄輸出(無法正常工作,因爲FORMAT的返回字符串可能會與可能的返回值相混淆)

(let ((*the-var* nil)) ;no return value intended//nil expected 
    #|do some stuff|# 
    (FORMAT *the-var* "some text")) 
->"some text" 

所以我不知道是否有告知制,沒有丟棄輸出到大陣仗,像*the-var*變量設置爲「的/ dev/null的」 -stream或將條件子句圍繞它的方法嗎?

回答

4

FORMAT不會丟棄輸出。

如果傳遞NILFORMAT作爲輸出方向,那麼它將返回輸出爲一個字符串,將打印到流。

不打印任何東西的最佳方法是不要致電FORMAT

使用FORMAT生成輸出並且不使用該輸出進行顯示幾乎沒有意義。只要檢查你是否想要輸出。

(let ((output-p nil)) ;no return value intended//nil expected 
    #|do some stuff|# 
    (when output-p 
     (FORMAT stream "some text")))