【发布时间】:2019-06-22 02:54:54
【问题描述】:
我想同时使用&rest 和&key。但是,下面的尝试代码:
(defun test (&rest args &key (name "who")) nil)
(test 1 2 3 4 5 :name "hoge")
导致错误:
*** - 测试: (1 2 3 4 5 :NAME "hoge") 中的关键字参数应该成对出现
当我只给出(test :name "hoge") 之类的关键字参数时,它可以工作。是否可以同时使用 &rest 和 &key?
【问题讨论】:
-
如果你想让 &rest 表示这个意思,你需要有自己的 defun 来包装标准的 defun 并实现你想要的调用约定。在 CL 中,rest 和 key 可以一起使用,但要按照lispworks.com/documentation/HyperSpec/Body/03_da.htm中的规则进行
-
请注意,您可以使用
&allow-other-keys,这可能会帮助您解决一些问题(并非全部:参数的数量仍然需要偶数)。
标签: lisp common-lisp variadic-functions keyword-argument