Question

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?

Was it helpful?

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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top