2012-03-02 46 views
4

說我們有一個插槽,而不:在initFormCommon Lisp:如何檢查一個插槽是否被綁定? (CLOS)

(defclass foo() 
    ((x :reader x :initarg x))) 

我如何檢查是否FOO的一個實例的插槽X綁定?

有一種方法可以用MOP來做到這一點,我覺得這很醜陋。有更容易的方法嗎?

我寧願訴諸:

(defclass foo() 
    ((x :reader x :initarg x :initform nil))) 

,只是檢查它是否是零或不 - 在這種情況下,x可能永遠是零(曖昧)。

+5

它是因爲我已經使用CLOS很長一段時間,但我認爲你需要'槽boundp'。 – 2012-03-02 03:32:06

+0

你提供第二個參數是什麼? – mck 2012-03-02 03:49:12

+0

檢查通用lisp手冊:http://www.lispworks.com/documentation/HyperSpec/Front/ – 2012-03-02 04:10:21

回答

11

搜索在包CLSLOT所有符號:

CL-USER 1 > (apropos "SLOT" "CL") 

SLOT-MISSING (defined) 
UNBOUND-SLOT-INSTANCE (defined) 
SLOT-VALUE (defined) 
SLOT-BOUNDP (defined) 
SLOT-EXISTS-P (defined) 
WITH-SLOTS (defined macro) 
SLOT-MAKUNBOUND (defined) 
UNBOUND-SLOT 
MAKE-LOAD-FORM-SAVING-SLOTS (defined) 
SLOT-UNBOUND (defined) 

我猜想,SLOT-BOUNDP你想要做什麼。通過查看Common Lisp的HyperSpec我們可以驗證這一點:

+0

呵呵,謝謝 - 如此尷尬簡單 – mck 2012-03-03 20:29:11