Generics 专门处理关键字的泛型函数

Generics 专门处理关键字的泛型函数,generics,common-lisp,Generics,Common Lisp,在CommonLisp中是否有创建泛型函数的方法 其中要专门化的参数是关键字参数 例如,与此不同的是: CL-USER> (defgeneric tst (a)) #<STANDARD-GENERIC-FUNCTION TST (0)> CL-USER> (defmethod tst ((a list)) (print a)) #<STANDARD-METHOD TST (LIST) {1004ECC903}> CL-USER>(定义

在CommonLisp中是否有创建泛型函数的方法 其中要专门化的参数是关键字参数

例如,与此不同的是:

CL-USER> (defgeneric tst (a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst ((a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>
CL-USER>(定义通用tst(a))
#
CL-USER>(定义方法tst((列表))
(打印a)
#
…它在参数“a”上指定。 我想要以下内容:

CL-USER> (defgeneric tst (&key a))
#<STANDARD-GENERIC-FUNCTION TST (0)>
CL-USER> (defmethod tst (&key (a list)) 
           (print a))
#<STANDARD-METHOD TST (LIST) {1004ECC903}>
CL-USER>(定义通用tst(&键a))
#
CL-USER>(定义方法tst和键(列表))
(打印a)
#
显然,这与设置 关键字参数的默认值,所以我有点卡住了。在实际的代码中,这个问题与我选择了不同的参数布局有关,所以这不是问题(引导起来有点整洁!),但万一我再次遇到这个问题,我想我最好问问专家


干杯所有

不,这不是由Common Lisp提供的。

它不直接受支持,但您可以通过分派到通用函数来实现相同的效果

(defgeneric foo-impl (bar baz))

(defun foo (&key bar baz)
  (foo-impl bar baz))

这是如何产生OP想要的相同效果的?因为专门化
foo impl
允许
foo
像专门化一样工作。