0

FORMAT実際の呼び出しの前に設定された特定のグローバル変数に応じて、出力を破棄するように動的に指示する方法が必要です。に変更tすると対処できると思いましたが、返された文字列が実際の戻り値と混同される可能性がある時点でnilこれらの呼び出しを使用できなくなるため、満足できません。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"

*the-var*したがって、変数を「/ dev/null」ストリームに設定したり、条件句を前後に配置したりするなど、FORMATに大騒ぎせずに出力を破棄するように指示する方法があるのだろうか?

4

2 に答える 2

4

コンポーネントストリームのないブロードキャストストリームは、出力を破棄するCommonLispの方法です。make-broadcast-streamを使用して作成できます。

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