How to export slots and accessors from Lisp classes?
-
19-06-2021 - |
题
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?
解决方案
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)
不隶属于 StackOverflow