How to export slots and accessors from Lisp classes?
clos, common-lisp, lisp, sbcl
Solution
You can't export slots and accessors.
In Common Lisp you can export symbols.
So, export the symbol `BAZ` which names the slot.
Then in package `CL-USER`:
(slot-value some-instance 'foo:baz)
Unexported you have to write:
(slot-value some-instance 'foo::baz)
If you import the symbol into the package `CL-USER`:
(slot-value some-instance 'baz)
Problem
This is my class's package: ``` (in-package :cl-user) (defpackage foo (:use :cl) (:export :bar)) (in-package :foo) (defclass bar () (baz)) ``` I can create an instance of `bar` in package `cl-user`. ``` CL-USER> (defvar f) F CL-USER> (setf f (make-instance 'foo:bar)) #<FOO:BAR {10044340C3}> ``` But I can't access the member `baz`. Calling `slot-value` like so ... ``` CL-USER> (slot-value f 'baz) ``` ... results in this error message: ``` 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] ``` I already tried to add `baz` to the `:export` list but that does not work either. How to export slots and accessors from packages?