Как экспортировать слоты и средства доступа из классов Lisp?

Это пакет моего класса:

(in-package :cl-user)
(defpackage foo
  (:use :cl)
  (:export :bar))
(in-package :foo)

(defclass bar ()
  (baz))

Я могу создать экземпляр bar в упаковке cl-user,

CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>

Но я не могу получить доступ к участнику baz, призвание slot-value вот так...

CL-USER> (slot-value f 'baz)

... приводит к этому сообщению об ошибке:

When attempting to read the slot's value (slot-value), the slot
BAZ is missing from the object #<FOO:BAR {10044340C3}>.
   [Condition of type SIMPLE-ERROR]

Я уже пытался добавить baz к :export список, но это тоже не работает.

Как экспортировать слоты и аксессоры из пакетов?

1 ответ

Решение

Вы не можете экспортировать слоты и аксессоры.

В Common Lisp вы можете экспортировать символы.

Итак, экспортируем символ BAZ который называет слот.

Потом в упаковке CL-USER:

(slot-value some-instance 'foo:baz)

Вы должны написать:

(slot-value some-instance 'foo::baz)

Если вы импортируете символ в пакет CL-USER:

(slot-value some-instance 'baz)
Другие вопросы по тегам