2012-07-05 13 views
4

這是我的類的包:如何從Lisp類導出插槽和存取器?

(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列表但這並不工作。

如何從包中導出插槽和存取器?

回答

17

您不能出口插槽和訪問器。

在Common Lisp中,您可以導出符號。

因此,輸出命名插槽的符號BAZ

然後在包CL-USER

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

未導出你必須寫:

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

如果導入符號到包CL-USER

(slot-value some-instance 'baz)