Mic*_*cky 10 class common-lisp clos slots lispworks
我有一个像这样的课
(defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
Run Code Online (Sandbox Code Playgroud)
如果我只知道这个类的实例,那么common-lisp中是否有一个函数如何获取这些插槽的列表?
Rai*_*wig 19
许多Common Lisp实现都支持CLOS 元对象协议.这为类,槽和其他元对象提供了内省操作.
在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)
Run Code Online (Sandbox Code Playgroud)
功能slot-definition-name
和class-direct-slots
被用于CLOS元对象协议定义,并在许多Common Lisp的实现都支持-只要他们是可以不同的包装.例如,在SBCL中,可能会在包中找到它们SB-MOP
.
从课程中我们可以获得直接插槽列表.直接槽是直接为该类定义的槽,并且不是继承的槽.如果要获取所有插槽的列表,请使用该功能class-slots
.
这里的插槽意味着我们得到一个槽定义对象,它描述了槽.要获取插槽的名称,必须使用该函数从插槽定义对象中检索名称slot-definition-name
.
归档时间: |
|
查看次数: |
1539 次 |
最近记录: |