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

Jan*_*ard 3 lisp sbcl common-lisp clos

这是我班级的套餐:

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

(defclass bar ()
  (baz))
Run Code Online (Sandbox Code Playgroud)

我可以创建一个bar包的实例cl-user.

CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>
Run Code Online (Sandbox Code Playgroud)

但我无法访问该成员baz.slot-value像这样打电话......

CL-USER> (slot-value f 'baz)
Run Code Online (Sandbox Code Playgroud)

...导致此错误消息:

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]
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加baz:export列表中,但这也不起作用.

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

Rai*_*wig 16

您无法导出插槽和访问者.

在Common Lisp中,您可以导出符号.

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

然后在包中CL-USER:

(slot-value some-instance 'foo:baz)
Run Code Online (Sandbox Code Playgroud)

不记得你必须写:

(slot-value some-instance 'foo::baz)
Run Code Online (Sandbox Code Playgroud)

如果将符号导入包中CL-USER:

(slot-value some-instance 'baz)
Run Code Online (Sandbox Code Playgroud)