In Common Lisp, how can I override the default string representation of a CLOS class so that calls to format
or princ
will print something intelligible, even when objects of that class are embedded within other types, such as lists or arrays?
For example, if I call (format t "~a~%" x)
when x holds an instance of my solution class, I want it to print something like #<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6>
instead of #<SOLUTION {BB7CD31}>
.
So far, all I have managed to figure out is writing custom functions to handle printing structures that I know will contain instances of this class, but this is tedious. Surely Lisp provides some way to get this functionality for free?
You should be looking at print-object
and print-unreadable-object
. Suppose you have a class named FOO
like so:
(defclass foo ()
((name :accessor foo-name)))
And you want to print instances like this: #<FOO "xyz">
where "xyz"
is the content of slot name
. In this case, the following implementation of print-object
would do what you want:
(defmethod print-object ((obj foo) out)
(print-unreadable-object (obj out :type t)
(format out "~s" (foo-name obj))))
检查print-object
。
如果您还查看22.1.3.13打印其他对象,则建议将print-unreadable-object作为此类情况的通用格式宏
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.