string - Lisp:如何覆盖 CLOS 类的默认字符串表示?

标签 string lisp common-lisp representation clos

在 Common Lisp 中,如何覆盖 CLOS 类的默认字符串表示,以便调用 formatprinc会打印一些可理解的东西,即使该类的对象嵌入到其他类型中,例如列表或数组?

例如,如果我调用 (format t "~a~%" x)当 x 包含我的解决方案类的实例时,我希望它打印类似 #<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6> 的内容而不是 #<SOLUTION {BB7CD31}> .

到目前为止,我所设法弄清楚的是编写自定义函数来处理我知道将包含此类实例的打印结构,但这很乏味。 Lisp 肯定提供了一些免费获得此功能的方法吗?

最佳答案

您应该查看 print-objectprint-unreadable-object .假设您有一个名为 FOO 的类像这样:

(defclass foo ()
  ((name :accessor foo-name)))

并且您想打印这样的实例:#<FOO "xyz">其中 "xyz"是槽的内容 name .在这种情况下,以下执行 print-object会做你想做的事:

(defmethod print-object ((obj foo) out)
  (print-unreadable-object (obj out :type t)
    (format out "~s" (foo-name obj))))

关于string - Lisp:如何覆盖 CLOS 类的默认字符串表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382122/

相关文章:

java - 在 Java 中将用户输入存储为字符串

Javascript + 从变量名和字符串构建动态变量名

string - 在包含子字符串的字符串集中查找字符串的快速方法

lisp - 如何从 plist 中获取属性

c - 包含给定集合中的所有字符串作为子字符串的最佳字符串

lisp - 可以像在 C# 中那样在 LISP 中重载函数吗?

class - 使用类的 Common Lisp 替代方案

floating-point - Lisp 的FORMAT 函数的隐式转换是否可以控制?

programming-languages - Scheme 还是 Common Lisp?

optimization - 是否可以为单个包声明优化?