Standard Generic Function PRINT-OBJECT
print-object object stream => object
print-object ( object standard-object ) stream
print-object ( object structure-object ) stream
object - オブジェクト
stream - ストリーム
ジェネリック関数print-objectは、 objectの印刷表現をstreamへ書き込みます。 この関数print-objectは、 Lispのプリンターによって呼び出されるものであり、 ユーザーが呼び出すべきではありません。
各実装は、クラスstandard-objectとクラスstructure-objectの それぞれのクラスを提供するよう要求されます。 さらに各実装は、常に適切なメソッドが存在することが保証されるよう、 その他の十分なクラスを提供しなければなりません。 その他のクラスのメソッドを追加するかどうかは実装の自由です。 ユーザーは、自身のクラスに対して その実装依存のメソッドを継承したくないときは、 print-objectのメソッドを書くことができます。
structure-objectのメソッドは デフォルトでは#S表記によってオブジェクトを印刷します。 22.1.3.2. 文字の印字をご確認ください。
print-objectのメソッドは、 下記に示すプリンター制御の変数の意味の一部を実装する責任があります。
*print-readably*
print-objectの全てのメソッドは、 *print-readably*に従う必要があります。 これはユーザー定義メソッドと実装定義のメソッドの両方が含まれます。 構造体とstandard-objectのオブジェクトの 読み込み可能な印刷を制御するのは それらのprint-objectのメソッドであり、 それらのmake-load-formメソッドによってではありません。 これらのオブジェクトの類似性はアプリケーションに依存するので、 したがってこれらのメソッドが行うことは何でも定義できます。 3.2.4.2. リテラルオブジェクトの類似性をご確認ください。*print-escape*
*print-escape*を実装しなければなりません。*print-pretty*
*print-pretty*の値によって 改行やその他の出力の状態を特別に実行したいかもしれません。 より詳しい情報は、(例えば)マクロpprint-fillをご確認ください。 22.2.1.4. プリティプリンターのディスパッチテーブルと22.2.2. プリティプリンターの使用例も合わせてご確認ください。*print-length*
*print-length*に従わなければなりません。 より詳しい情報は、(例えば)マクロpprint-logical-blockや pprint-popをご確認ください。 22.2.1.4. プリティプリンターのディスパッチテーブルと22.2.2. プリティプリンターの使用例も合わせてご確認ください。*print-level*
*print-level*を扱い、 各メソッドは正確にひとつの構造の階層として扱うように提供されます。 よって、より深い階層のときでもwrite(あるいは同等の関数)を 再帰的に呼び出すことができます。 プリンターによるオブジェクトが要素を持つかどうかの決定 (したがって印刷の階層が*print-level*未満ではないときに 印刷するべきではないという決定)は、 実装依存です。 いくつかの実装はprint-objectメソッドが呼ばれず、 他のメソッドが呼び出され、そしてオブジェクトが要素を持つかどうかの決定は、 streamへ書き込みが行われようとしたときが元になります。*print-circle*
*print-circle*の値がtrueNおとき、 print-objectのユーザー定義メソッドは、 write, prin1, princ, formatの どれかを使用することで、ストリームに対してオブジェクトを印刷できますが、 例外として循環が検出されたときは、#n#構文が使われて印刷されます。 もしprint-objectのユーザー定義メソッドが 指定されたストリーム以外のストリームに印刷するときは、 循環の検出はそのストリームに対してやり直されます。 *print-circle*をご確認ください。*print-base*, *print-radix*, *print-case*, *print-gensym*, *print-array*
もしこれらのルールに従わなかったときの結果は未定義です。
一般的にプリンターとprint-objectのメソッドは、 構造を通して再帰的に操作されるため プリンター制御変数を再束縛するべきではありません。
いくつかの実装では、 print-objectメソッドに渡される引数のstreamが 元のストリームではななく、 プリンターの一部として実装された中間のストリームになるため、 したがってメソッドはこのストリームの 同一性に依存するべきではありません。
なし。
なし。
なし。
pprint-fill, pprint-logical-block, pprint-pop, write, *print-readably*, *print-escape*, *print-pretty*, *print-length*, 22.1.3. 標準のPrint-Objectメソッド, 22.1.3.12. 構造体の印字, 22.2.1.4. プリティプリンターのディスパッチテーブル, 22.2.2. プリティプリンターの使用例
なし。