是否可以有条件地使用\调用关键字?本质上代替:
(defun test (var)
(if var
(some-function :para var)
(some-function)))
我想要这样的东西:
(defmacro test (var)
`(some-function (if ,var [add-keyword])))
函数的位置(出于快速简单的示例目的):
(defun some-function (&key para)
(cond ((equal para 'yes) "yes")
((null para) "no")
(t "other")))
通常可以以不需要执行此操作的方式编写代码(只需通过nil
或使用默认值即可)。但是,如果确实无法避免,则可以使用apply
:
(apply #'some-function args... (when var (list :para var)))
如果你想传递的关键字参数,你应该使用一个&rest
带有参数apply
和&allow-other-keys
。如果要将它们传递给CLOS中的下一个方法,则应使用call-next-method
。通常,最好在编译时就知道一组关键字参数,因为这样编译器可以使事情比未知情况快得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句