如何正确告诉FORMAT丢弃输入

时间:2012-08-06 12:23:44

标签: common-lisp

我想要一种动态的方式告诉FORMAT根据在实际调用之前设置的某个全局变量来丢弃输出。我认为将t更改为nil应该可以完成交易,但我不满意,因为我无法在返回的字符串可能出现的任何位置使用这些FORMAT调用混淆了实际的回报值。

E.g:

告诉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 或放置围绕它的条件条款?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

FORMAT不会丢弃输出。

如果您将NIL传递给FORMAT作为输出方向,则它会将输出作为字符串返回,并且将打印到流中。

不打印任何内容的最佳方法是不要拨打FORMAT

使用FORMAT生成输出而不使用该输出进行显示是没有意义的。只需检查是否需要输出。

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