Macro WITH-OUTPUT-TO-STRING

UP


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. 横断の規則と副作用

備考

なし。


TOP, Github