Как экспортировать слоты и средства доступа из классов 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)