common lisp 中 defmethod 定义的顺序

问题描述 投票:0回答:1

我定义

defmethod
的顺序是否起作用?是否保证先测试第一个定义,看看参数是否匹配?

我的

defmethod
思维模型是,它的行为就像
cond
,首先测试第一个案例。

(defun a (X)
    (cond ((typep X 'number) ...)
          ((typep X 'string) ...)
          ((typep X 'list) ...)))

如果我知道第一种情况在我的申请中出现最频繁,那么我会将这种情况作为第一种情况包含在

cond
中。

defmethod
一样吗。

(defmethod a ((X number)) ...)

(defmethod a ((X string)) ...)

(defmethod a ((X list)) ...)

我的思维模型正确吗?

common-lisp
1个回答
0
投票

不,不是。有效方法是根据定义的方法、方法组合以及 GF 调用的参数类来计算的。请参阅规范中的方法选择和组合

© www.soinside.com 2019 - 2024. All rights reserved.