如何从Lisp类导出插槽和访问器?

如何从Lisp类导出插槽和访问器?,lisp,common-lisp,sbcl,clos,Lisp,Common Lisp,Sbcl,Clos,这是我的班级套餐: (in-package :cl-user) (defpackage foo (:use :cl) (:export :bar)) (in-package :foo) (defclass bar () (baz)) 我可以在packagecl-user中创建bar的实例 CL-USER> (defvar f) F CL-USER> (setf f (make-instance 'foo:bar)) #<FOO:BAR {10044340C3}&

这是我的班级套餐:

(in-package :cl-user)
(defpackage foo
  (:use :cl)
  (:export :bar))
(in-package :foo)

(defclass bar ()
  (baz))
我可以在package
cl-user
中创建
bar
的实例

CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>
。。。导致此错误消息:

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。
[简单错误类型的条件]
我已经尝试将
baz
添加到
:export
列表中,但这也不起作用

如何从包中导出插槽和访问者?

您不能导出插槽和访问者

在Common Lisp中,可以导出符号

因此,导出命名插槽的符号
BAZ

然后在包
CL-USER
中:

(slot-value some-instance 'foo:baz)
(slot-value some-instance 'baz)
未经报道,你必须写:

(slot-value some-instance 'foo::baz)
如果将符号导入包
CL-USER

(slot-value some-instance 'foo:baz)
(slot-value some-instance 'baz)