25得票7回答
Clojure中的CLOS是什么?

是否存在类似于Clojure的CLOS(Common Lisp Object System)?

16得票3回答
Lisp:如何覆盖CLOS类的默认字符串表示?

在Common Lisp中,我该如何覆盖CLOS类的默认字符串表示,以便调用format或princ时打印出可理解的内容,即使该类的对象嵌入其他类型(如列表或数组)中也是如此? 例如,如果我在x保存一个解决方案类的实例时调用(format t "~a~%" x),我希望它打印出类似于#而不是...

14得票2回答
Common Lisp中struct和class的区别

我对结构体的理解是,它有用于存储数据的插槽,有一个类型,有make-X和插槽访问函数,并且可以通过方法进行专业化(因为它有一个类型)。 我对类的理解是,它具有相同的功能和多重继承。this question的最佳答案指出,结构体可以具有单一继承,并且CLOS的初始实现比结构体“慢得多”。 ...

13得票1回答
CLOS相较于其他基于类的面向对象系统的优势

我看到有人声称Common Lisp Object System(CLOS)优于传统的基于类的面向对象系统。 CLOS的维基百科页面提到了两种方法之间的差异-主要是CLOS中的多重分派和类与方法的分离。这些只是差异还是CLOS的真正优势? 我看到有人声称Common Lisp Object ...

12得票1回答
如何更改类的元类

这种情况屡屡发生在我身上:我定义一个类,然后忘记把它设置成可调用的,或者它是一个 Gtk 组件类,因此需要声明它的元类。然而,一旦定义了元类,SBCL 就不允许我更改它(即使没有这个类的实例)。例如,执行以下代码:(defclass foo () ((slot-a))) 然后添加一个元类并...

12得票1回答
有没有一种方法可以获取一个类的槽位?

我有一个像这样的类(defclass shape () ((color :initform :black) (thickness :initform 1) (filledp :initform nil) (window :initform nil))) 如果我只知道这个类的实例,是否有...

11得票3回答
如何取消一个已经定义好的方法?

在开发过程中,我定义了一个“initialize-instance :after”方法,但后来不再需要它,实际上它妨碍了我的工作,因为里面调用的代码已经无效了。由于unintern函数没有限定符参数,有没有办法“取消国际标准化组织”方法的符号限定符组合,这样我就不必重新启动lisp和从头开始加...

11得票2回答
在Common Lisp中测试一个类是否是另一个类的子类

如何查看一个CLOS类是否是另一个CLOS类的子类?

11得票1回答
让Lisp中的clos对象可打印

如果您想在Common Lisp中使CLOS对象可打印(可读性的打印),而不使用除print和read之外的任何东西,该怎么做?

10得票1回答
在哈希表中使用Common Lisp CLOS对象作为键?

我想将Common Lisp CLOS对象用作哈希表中的键。我认为这很简单:(defclass my-class () ((a :accessor a :initarg a))) (defun my-class= (my-instance-1 my-instance-2) (equal (a...