Macro WITH-OUTPUT-TO-STRING
with-output-to-string
(
var &optional
string-form &key
element-type)
declaration* form* => result*
var - 変数名
string-form - フォームかnil
。 もしnil
ではないとき、 評価されてstringが生成されます。
string - fill-pointerを持つ文字列
element-type - 型指定子。デフォルトはcharacter
。
declaration - 宣言式。評価されません。
form - 暗黙のprogn
result - もしstring-formが指定されていないか nil
のときは文字列、 それ以外のときはformの返却値
with-output-to-string
は文字列の出力ストリームを作成し、 一連のストリームに結果を送信するであろう操作を実行し、 そしてそのストリームをクローズします。
element-typeはストリームの要素の型を示す名前であり、 ストリームは指定された型の要素を収容できるような 特定化した型で構築されなければなりません。
暗黙のprognとして実行されるボディ部は、 出力の文字列ストリームをvarに束縛します。 文字列ストリームへの全ての出力は文字列内に保存されます。
もしstringが指定されたとき、element-typeは無視され、 そして出力はstringに対して vector-push-extend
を使用したかのように 蓄積するように追加されていきます。
出力の文字列ストリームはwith-output-to-string
から 退出したときに通常時と非通常時に関わらず自動的にクローズされます。 変数varに束縛された出力の文字列ストリームは動的エクステントを持ち、 フォームから退出されたときにエクステントは終了します。
もしstringが指定されなかったとき、 with-output-to-string
は文字列を受け付けるストリームを提供し、 element-typeで示された文字列を返却します。 もしstringが指定されたとき、 with-output-to-string
は最後のformが 評価された結果を返却します。
変数varに代入しようとしたときの結果は未定義です。
setq fstr (make-array '(0) :element-type 'base-char
(0 :adjustable t)) => ""
:fill-pointer with-output-to-string (s fstr)
(format s "here's some output")
(input-stream-p s)) => false
(=> "here's some output" fstr
stringは修正されます。
なし。
この呼び出しの動的エクステント内で 直接stringに対して破壊的修正を行ったときの結果は未定義です。
make-string-output-stream
, vector-push-extend
, 3.6. 横断の規則と副作用
なし。