【发布时间】:2012-10-07 21:27:30
【问题描述】:
我有许多相同长签名的函数(为简单起见,此处缩短):
(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 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的工作定义是否足够奇怪以至于这不再简单。)
【问题讨论】:
标签: function clojure arguments definition reduce