在Common Lisp方法中指定关键字参数的类型

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

我以为我可以定义一个接受关键字参数的方法。但是,当我有多个带有不同类型的关键字参数的方法时,似乎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定义多个方法?

methods common-lisp dispatch keyword-argument clos
1个回答
0
投票
因此,您的第二个定义在调度部分没有不同,并且改写了现有方法。我也相信您的示例应该发出有关listnumber为未绑定变量的警告。
© www.soinside.com 2019 - 2024. All rights reserved.