我想定義類對象的方法,它們繼承基於類的祖先,就像實例的方法繼承一樣。有沒有辦法做到這一點?如何定義和調用普通的類方法lisp/CLOS
以下是什麼不工作:eql
-method專業化。考慮下面這個例子:
(defclass animal()())
(defclass bird (animal)())
(defclass woodpecker (bird)())
(defmethod wings-p ((animal-class (eql (find-class 'animal)))) nil)
(defmethod wings-p ((bird-class (eql (find-class 'bird)))) t)
調用(wings-p (find-class 'woodpecker))
生成no-method-error
,你可以看到爲什麼 - 類woodpecker
顯然不是eql
任何方法specializers。
我想以定義bird
和animal
「方法」,這樣,當我打電話wings-p
上(find-class woodpecker)
,wings-p
回報t
。
我覺得這是幾乎所有其他面向對象系統的標準功能,但我不記得如何使用CLOS做到這一點。
這在Java,C#或C++中不是標準的,其中靜態方法在邏輯上是等價的。在這些語言中,您必須指定其他類,即使它恰好是基類。 – acelent