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?

Original source