这是我班级的包裹:
(in-package :cl-user)
(defpackage foo
(:use :cl)
(:export :bar))
(in-package :foo)
(defclass bar ()
(baz))
我可以在包bar
中创建cl-user
的实例。
CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>
但我无法访问会员baz
。像这样呼叫slot-value
......
CL-USER> (slot-value f 'baz)
...导致出现此错误消息:
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
添加到:export
列表中,但这也不起作用。
如何从包中导出插槽和访问器?
答案 0 :(得分:17)
您无法导出广告位和访问者。
在Common Lisp中,您可以导出符号。
因此,导出名称为插槽的符号BAZ
。
然后在包CL-USER
中:
(slot-value some-instance 'foo:baz)
Unexported你必须写:
(slot-value some-instance 'foo::baz)
如果您将符号导入包CL-USER
:
(slot-value some-instance 'baz)