假设我们有一个没有:InitForm 的插槽

(defclass foo ()
  ((x :reader x :initarg x)))
.

如何检查foo实例的slot x是否绑定?

有一种方法可以用拖把做到这一点,我发现这很丑陋。有没有更简单的方法?

我宁愿诉诸:

(defclass foo ()
  ((x :reader x :initarg x :initform nil)))
.

,只需检查它是否是nil - 其中x可能永远不会是nil(模糊的)。

有帮助吗?

解决方案

search for all symbols with SLOT in package 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)

I would guess that SLOT-BOUNDP does what you want. By looking at the Common Lisp HyperSpec we can verify this:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top