我有许多函数具有相同的长签名(为简化起见,在此缩短):
(defn f
[x & {:keys [a b c d e f g h]
:or [a false b false c false d false e false f false g false h false]}]
a)
我希望可以使用宏、函数或者 def 来提前存储这个常用的签名:
(def args `[a b c d e f g h])
(defn args [] `[a b c d e f g h])
(defmacro args [] `[a b c d e f g h])
但是当我把它们都插入时,它们中的每一个都会产生问题。
(defn f
[x & {:keys (args)
:or [a false b false c false d false e false f false g false h false]}]
a)
最终出现了像这样的错误:
CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(NO_SOURCE_PATH:1)
我的两个问题是:
有没有办法定义和使用这样一个公共的
args
?如果可以定义这样的
args
,我还想将其缩减以获取:or
参数:[a false b false c false d false e false f false g false h false]
。如何做到这一点?(我问这个问题是因为,如果args
的工作定义足够奇怪,那么这可能不再是直截了当的)