假设我们有一个没有的插槽:initform
(defclass foo ()
((x :reader x :initarg x)))
如何检查foo实例的插槽x是否绑定?
有一种方法可以用MOP来做到这一点,我觉得非常难看。有没有更简单的方法?
我宁愿诉诸:
(defclass foo ()
((x :reader x :initarg x :initform nil)))
并检查它是否为零 - 在这种情况下,x可能永远不会为零(不明确)。
答案 0 :(得分:15)
在包SLOT
中搜索CL
的所有符号:
CL-USER 1 > (apropos "SLOT" "CL")
SLOT-MISSING (defined)
UNBOUND-SLOT-INSTANCE (defined)
SLOT-VALUE (defined)
SLOT-BOUNDP (defined)
SLOT-EXISTS-P (defined)
WITH-SLOTS (defined macro)
SLOT-MAKUNBOUND (defined)
UNBOUND-SLOT
MAKE-LOAD-FORM-SAVING-SLOTS (defined)
SLOT-UNBOUND (defined)
我猜想SLOT-BOUNDP会做你想要的。通过查看Common Lisp HyperSpec,我们可以验证这一点: