4

これは私のクラスのパッケージです:

(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}>

しかし、メンバーにアクセスできませんbazslot-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が、それも機能しません。

パッケージからスロットとアクセサーをエクスポートする方法は?

4

1 に答える 1

16

スロットとアクセサーをエクスポートすることはできません。

Common Lispでは、シンボルをエクスポートできます。

したがって、BAZスロットに名前を付けるシンボルをエクスポートします。

次にパッケージでCL-USER

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

エクスポートされていないあなたは書く必要があります:

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

シンボルをパッケージにインポートする場合CL-USER

(slot-value some-instance 'baz)
于 2012-07-05T19:56:36.530 に答える