我定义
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)) ...)
我的思维模型正确吗?
不,不是。有效方法是根据定义的方法、方法组合以及 GF 调用的参数类来计算的。请参阅规范中的方法选择和组合。