我想要一种动态的方式告诉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 或放置围绕它的条件条款?
答案 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")))