Standard Generic Function DESCRIBE-OBJECT
describe-object
object stream => implementation-dependent
describe-object (
object standard-object
)
stream
object - オブジェクト
stream - ストリーム
ジェネリック関数describe-object
は、 objectの定義をstreamへ印刷します。 describe-object
はdescribe
によって呼び出されるものであり、 ユーザーによって呼び出してはいけません。
各実装は、クラスstandard-object
のメソッドと、 その他にも適切なメソッドが常に存在することを保証するよう、 十分なクラスのメソッドを提供するよう要求されています。 実装は、他のクラスのメソッドを追加することは自由です。 ユーザーは、自身が作成したクラスについて、 実装が提供したメソッドから継承したくはないときは describe-object
のメソッドを作成することができます。
describe-object
のメソッドは、 再帰的にdescribe
を呼び出すことができます。 そのときのインデント、深さの制限、循環の検出は、 全て自動的に行われ、 もしdescribe
がより深い構造の階層で再帰的に呼び出されたとき、 各メソッドは正確にひとつの階層構造だけになるように調整されます。 この規則に従わなかったときの結果は未定義です。
ある実装では、describe-object
メソッドの 引数に渡されたstreamは、元のstreamではなく、 describe
の実装部分による中間的なストリームであることがあります。 したがって、メソッドはこのストリームの同一性について依存するべきではありません。
defclass spaceship ()
(
((captain :initarg :captain :accessor spaceship-captain)
(serial# :initarg :serial-number :accessor spaceship-serial-number)))
defclass federation-starship (spaceship) ())
(
defmethod describe-object ((s spaceship) stream)
(with-slots (captain serial#) s
(format stream "~&~S is a spaceship of type ~S,~
( ~%with ~A at the helm ~
and with serial number ~D.~%"
type-of s) captain serial#)))
s (
make-instance 'federation-starship
("Rachel Garrett"
:captain "NCC-1701-C")
:serial-number => #<FEDERATION-STARSHIP 26312465>
describe *)
(26312465> is a spaceship of type FEDERATION-STARSHIP,
>> #<FEDERATION-STARSHIP the helm and with serial number NCC-1701-C.
>> with Rachel Garrett at => <no values>
なし。
なし。
print-object
に適用可能なものは、 describe-object
に適用可能なものと、 同じ実装の技術を用いています。
describe-object
の返却値が未指定になっている理由は、 それらの全てのメソッドで明に(values)
という式を ユーザーに対して強制させることを避けるためです。 これはdescribe
が行います。