0

我想要一种动态的方式来告诉FORMAT丢弃输出,具体取决于在实际调用之前设置的某个全局变量。我认为更改tnil应该做交易,但我不满意,因为我将无法FORMAT在返回的字符串可能与实际返回值混淆的任何时候使用这些调用。

例如:

告诉 FORMAT 在 TERMINAL-IO 上输出(工作正常)

(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"

因此,我想知道是否有任何方法可以告诉 FORMAT 放弃输出而不必大惊小怪,例如将*the-var*变量设置为“/dev/null”-stream或在其周围放置条件子句?

4

2 回答 2

4

没有组件流的广播流是 Common Lisp 丢弃输出的方式。您可以使用make-broadcast-stream创建一个。

于 2012-08-06T12:36:04.867 回答
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")))
于 2012-08-06T12:36:14.330 回答