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

时间:2012-07-05 19:42:42

标签: lisp common-lisp sbcl clos

这是我班级的包裹:

(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列表中,但这也不起作用。

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

1 个答案:

答案 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)