我有這樣一個有沒有辦法獲得班級的插槽?
(defclass shape()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
類是有共同點,口齒不清的功能如何讓這些插槽的列表,如果我只知道這個類的實例?
我有這樣一個有沒有辦法獲得班級的插槽?
(defclass shape()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
類是有共同點,口齒不清的功能如何讓這些插槽的列表,如果我只知道這個類的實例?
許多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)
功能slot-definition-name
和class-direct-slots
由用於CLOS元對象協議定義,並且在許多普通的Lisp實現支持 - 只要它們在可能不同的包。例如在SBCL中,人們可以在包SB-MOP
中找到它們。
從一堂課我們可以得到直接插槽列表。直接插槽是直接爲該類定義的插槽,它們不會被繼承。如果您想獲得所有插槽的列表,請使用功能class-slots
。
插槽這裏表示我們得到一個插槽定義對象,它描述了插槽。要獲取插槽的名稱,您必須使用功能slot-definition-name
從插槽定義對象中檢索名稱。
密切相關:http://stackoverflow.com/q/38452350/124319 – coredump
好的,謝謝你的回答。但我有另一個問題。我需要了解課堂上的每種方法。即使方法來自繼承類。 '(defclass point(shape) ((x:initform 0) (y:initform 0))) '有沒有辦法,如何得到它? – Micky
查看鏈接的問題。 – coredump