Я думал, что смогу определить метод, который принимает аргументы ключевых слов. Но когда у меня есть несколько методов с аргументами ключевых слов разных типов, кажется, что 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))
Значение (2) не относится к типу NUMBER при связывании SB-KERNEL :: X [Условие типа TYPE-ERROR]
Как определить несколько методов с & ключевыми аргументами разных типов