有没有办法获得 class 的插槽?
Is there a way to get the slots of a class?
我有一个class像这个
(defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
如果我只知道这个 class 的实例,common-lisp 中是否有一个函数如何获取这些插槽的列表?
许多 Common Lisp 实现支持 CLOS 元对象协议。这为 classes、槽和其他 元对象 .
提供了内省操作
在 LispWorks 中,可以直接在包 CL-USER
中访问相应的函数。
CL-USER 139 > (defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
#<STANDARD-CLASS SHAPE 40202910E3>
CL-USER 140 > (mapcar #'slot-definition-name
(class-direct-slots (class-of (make-instance 'shape))))
(COLOR THICKNESS FILLEDP WINDOW)
函数 slot-definition-name
和 class-direct-slots
由 CLOS 的元对象协议定义,并在许多 Common Lisp 实现中得到支持 - 只是它们所在的包可能不同。例如,在 SBCL 中,您可能会在包 SB-MOP
.
中找到它们
从 class 我们可以得到 直接插槽列表 。直接槽是直接为 class 定义的槽,它们不是继承的。如果你想得到所有插槽的列表,那么使用函数 class-slots
.
Slot这里的意思是我们得到一个slot definition对象,它描述了slot。要获取槽的名称,您必须使用函数 slot-definition-name
.
从槽定义对象中检索名称
我有一个class像这个
(defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
如果我只知道这个 class 的实例,common-lisp 中是否有一个函数如何获取这些插槽的列表?
许多 Common Lisp 实现支持 CLOS 元对象协议。这为 classes、槽和其他 元对象 .
提供了内省操作在 LispWorks 中,可以直接在包 CL-USER
中访问相应的函数。
CL-USER 139 > (defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
#<STANDARD-CLASS SHAPE 40202910E3>
CL-USER 140 > (mapcar #'slot-definition-name
(class-direct-slots (class-of (make-instance 'shape))))
(COLOR THICKNESS FILLEDP WINDOW)
函数 slot-definition-name
和 class-direct-slots
由 CLOS 的元对象协议定义,并在许多 Common Lisp 实现中得到支持 - 只是它们所在的包可能不同。例如,在 SBCL 中,您可能会在包 SB-MOP
.
从 class 我们可以得到 直接插槽列表 。直接槽是直接为 class 定义的槽,它们不是继承的。如果你想得到所有插槽的列表,那么使用函数 class-slots
.
Slot这里的意思是我们得到一个slot definition对象,它描述了slot。要获取槽的名称,您必须使用函数 slot-definition-name
.