&allow-other-keys ,它有什么作用? - 普通口齿不清

&allow-other-keys , What does it do? - Common Lisp

我很想知道 &allow-other-keys 应该做什么。当我查阅所有我能得到的文档时,我得到的参考文献少得惊人,而且没有真正的定义。我能弄清楚的是,它实际上是一个错误处理代码位,您可以在 &key 之后放置代码,以在调用宏时禁止检查关键参数。作为参考,这是我找到它的地方:

(defmacro macro-name ((passed-variable
                       &rest open-args
                       &key &allow-other-keys)
                      &body body)
  ...)

&allow-other-keys 有据可查:它禁止关键字参数检查。

在您的示例中,它使 (macro-name (foo :bar 1) ...) 成为可接受的 macro-name 调用。

虽然我认为 sds 的答案是正确的,但也许值得举一个例子,这可能是 &allow-other-keys:

的典型用例
(defun open-unsigned-byte (f &rest kws &key &allow-other-keys)
  (apply #'open f :element-type 'unsigned-byte kws))

这个函数想要让 open 拥有它需要的任何关键字参数,可能包括非标准参数,但想要确保元素类型是 unsigned-byte,并且所有的传递给 open 的附加参数是 关键字参数。这是可行的,因为在重复关键字参数(合法)的情况下,最左边的获胜。