% Macro WITH-OUTPUT-TO-STRING
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
:fill-pointer 0 :adjustable t)) => ""
(with-output-to-string (s fstr)
(format s "here's some output")
(input-stream-p s)) => false
fstr => "here's some output"
stringは修正されます。
なし。
この呼び出しの動的エクステント内で 直接stringに対して破壊的修正を行ったときの結果は未定義です。
make-string-output-stream
,
vector-push-extend
,
3.6. 横断の規則と副作用
なし。