在Common Lisp中,我该如何覆盖CLOS类的默认字符串表示,以便调用format或princ时打印出可理解的内容,即使该类的对象嵌入其他类型(如列表或数组)中也是如此? 例如,如果我在x保存一个解决方案类的实例时调用(format t "~a~%" x),我希望它打印出类似于#而不是...
我对结构体的理解是,它有用于存储数据的插槽,有一个类型,有make-X和插槽访问函数,并且可以通过方法进行专业化(因为它有一个类型)。 我对类的理解是,它具有相同的功能和多重继承。this question的最佳答案指出,结构体可以具有单一继承,并且CLOS的初始实现比结构体“慢得多”。 ...
我看到有人声称Common Lisp Object System(CLOS)优于传统的基于类的面向对象系统。 CLOS的维基百科页面提到了两种方法之间的差异-主要是CLOS中的多重分派和类与方法的分离。这些只是差异还是CLOS的真正优势? 我看到有人声称Common Lisp Object ...
这种情况屡屡发生在我身上:我定义一个类,然后忘记把它设置成可调用的,或者它是一个 Gtk 组件类,因此需要声明它的元类。然而,一旦定义了元类,SBCL 就不允许我更改它(即使没有这个类的实例)。例如,执行以下代码:(defclass foo () ((slot-a))) 然后添加一个元类并...
我有一个像这样的类(defclass shape () ((color :initform :black) (thickness :initform 1) (filledp :initform nil) (window :initform nil))) 如果我只知道这个类的实例,是否有...
在开发过程中,我定义了一个“initialize-instance :after”方法,但后来不再需要它,实际上它妨碍了我的工作,因为里面调用的代码已经无效了。由于unintern函数没有限定符参数,有没有办法“取消国际标准化组织”方法的符号限定符组合,这样我就不必重新启动lisp和从头开始加...
如果您想在Common Lisp中使CLOS对象可打印(可读性的打印),而不使用除print和read之外的任何东西,该怎么做?
我想将Common Lisp CLOS对象用作哈希表中的键。我认为这很简单:(defclass my-class () ((a :accessor a :initarg a))) (defun my-class= (my-instance-1 my-instance-2) (equal (a...