相当于CLOS的instanceof?如何检查实例是否从另一个对象继承?

时间:2013-10-03 05:38:45

标签: inheritance common-lisp clos

CL-USER> (defclass a () ())
CL-USER> (defclass b (a) ())
CL-USER> (make-instance 'b)
#<STANDARD-CLASS B>

我可以在我的实例b上调用什么谓词函数,如果它是从一个继承而返回T?本着:

CL-USER> (instanceof 'a *)
T

1 个答案:

答案 0 :(得分:9)

类名也是类型名称,因此:

(typep * 'a)

请参阅集成类型和类http://clhs.lisp.se/Body/04_cg.htm

或者你可以这样做:

(defmethod is-an-a-p ((x a))
  t)
(defmethod is-an-a-p ((x t))
  nil)