我以为我可以定义一个接受关键字参数的方法。但是,当我有多个带有不同类型的关键字参数的方法时,似乎lisp使用的是最后评估的方法。例如下面的内容:
(defmethod f (&key (x list)) (make-list 3 :initial-element (first x)))
(defmethod f (&key (x number)) (* 2 x))
现在f
的:x
仅接受数字,并为列表抛出错误:
(f :x 2) ;4
但是
(f :x '(2))
绑定SB-KERNEL :: X [TYPE-ERROR类型的条件]时,值(2)不是NUMBER类型
我如何用不同类型的&key args定义多个方法?
list
和number
为未绑定变量的警告。