Common Lisp: Как проверить, связан ли слот?(Блэк)

StackOverflow https://stackoverflow.com/questions/9527574

  •  15-11-2019
  •  | 
  •  

Вопрос

сказать, что у нас есть слот без: initform

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

Как я могу проверить, если слот X экземпляра Foo связан?

Есть способ сделать это с MOP, который я нахожу очень уродливым.Есть ли проще?

Я бы предпочел прибегнуть к:

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

и просто проверьте, является ли это Nil или нет - в этом случае X может никогда не быть ниль (неоднозначно).

Это было полезно?

Решение

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