(defmethod foo ((first (eql :simplex)) (thing vector))
<method body here>)
然后你必须把它称之为
(foo :step #(0 1 0 1))
要么
(apply #'foo '(:step #(0 1 0 1)))
所以,对于你的情况,你会做类似的事情
(defmethod dimension ((type (eql :simplex)) (thing vector))
;; calculate dimension of a SIMPLEX here
)
(defmethod dimension ((type (eql :step)) (thing vector))
;; calculate dimension of a STEP here
)
和 boundary 相同 .
如果您正在处理的事情确实是不同的结构,您可以考虑定义 struct 或 class 而不是使用原始列表 . 此时,您可以轻松地在适当的类型上定义方法,这可以让您回避这种方法的尴尬调用要求 .
1 回答
有点hacky,但你可以用
eql
专家来做这件事 .然后你必须把它称之为
要么
所以,对于你的情况,你会做类似的事情
和
boundary
相同 .如果您正在处理的事情确实是不同的结构,您可以考虑定义
struct
或class
而不是使用原始列表 . 此时,您可以轻松地在适当的类型上定义方法,这可以让您回避这种方法的尴尬调用要求 .