在CLOS方法定义中,特化器可以是类的列表而不是单个类吗?

时间:2012-04-04 09:15:12

标签: common-lisp clos

虽然它在一般情况下没有多大意义,因为它应该通过超类来完成,但我希望允许“nil”用于特定参数并避免必须定义单独的方法。

我正在尝试做类似的事情(伪代码)

(defmethod my-method ((obj1 my-class1) (obj2 (or my-class2 null)))
   method-body       )

2 个答案:

答案 0 :(得分:3)

普通CLOS不支持此功能。

支持:

  • 没有上课 - > Ť
  • EQL
  • 一堂课

答案 1 :(得分:0)

您可以创建一个没有插槽的mixin类,并将其添加到所有感兴趣的类的超类列表中;这是有道理的,因为你所做的事情意味着列表中的所有类都符合某种类型。

或者不要专门化 - 编写适用于感兴趣类型的超集的方法,但仅对您的子集起作用。这可能更容易,但不太干净。