这是我类的包:
(in-package :cl-user)
(defpackage foo
(:use :cl)
(:export :bar))
(in-package :foo)
(defclass bar ()
(baz))
我可以在包 cl-user
中创建一个 bar
的实例。
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
列表,但这也不起作用。
如何从包中导出插槽和访问器?
最佳答案
您不能导出插槽和访问器。
在 Common Lisp 中,您可以导出符号。
因此,导出命名插槽的符号 BAZ
。
然后在CL-USER
包中:
(slot-value some-instance 'foo:baz)
未导出你必须写:
(slot-value some-instance 'foo::baz)
如果将符号导入包CL-USER
:
(slot-value some-instance 'baz)
关于lisp - 如何从 Lisp 类导出槽和访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351443/