Clojure关键字参数默认取决于其他关键字参数?

时间:2014-10-17 17:29:22

标签: clojure

我正在尝试获取一个可选的关键字参数,该参数取决于其值的另一个可选关键字参数。

示例功能:

(defn printab [& {:keys [a b] :or {:a 5 :b 200}}]
  (println "a is" a "b is" b))

我希望:b的默认值为:a的值。有没有办法在defn宏中执行此操作,或者我只需要创建let绑定来处理此行为?

以下功能无法按我希望的方式运作:

(defn printab [& {:keys [a b] :or {:a 5 :b a}]
  (println "a is" a "b is" b))

1 个答案:

答案 0 :(得分:3)

可以在不使用let的情况下实现此目的。部分问题是默认映射中的冒号前缀,应省略。我认为你还需要引用整个参数图来使它工作。以下似乎是这样做的:

(defn printab [& {:keys [a b] :as m :or {a 5 b (:a m 5)}}]
  (println "a is" a "b is" b))