Lisp:如何为CLOS类覆盖默认的字符串表示形式?
-
29-10-2019 - |
题
在Common Lisp中,我如何覆盖CLOS类的默认字符串表示形式,以便对format
或princ
的调用将打印出可理解的内容,即使该类的对象嵌入在其他类型(例如列表或数组)中?/ p>
例如,如果我在x拥有我的解决方案类的实例时调用了(format t "~a~%" x)
,我希望它打印类似#<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6>
的内容,而不是#<SOLUTION {BB7CD31}>
。
到目前为止,我设法弄清楚的是编写自定义函数来处理我知道将包含此类的实例的打印结构,但这很繁琐。当然,Lisp提供了一些免费获取此功能的方法吗?
解决方案
其他提示
您应该查看print-object
和print-unreadable-object
。假设您有一个名为FOO
的类,如下所示:
通用标签
您要打印这样的实例:#<FOO "xyz">
,其中"xyz"
是插槽name
的内容。在这种情况下,print-object
的以下实现将满足您的要求:
通用标签
如果您还查看 22.1.3.13打印其他对象它建议 print-un可读对象作为此类情况的通用格式宏
不隶属于 StackOverflow