我正在尝试获取一个可选的关键字参数,该参数取决于其值的另一个可选关键字参数。
示例功能:
(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))
答案 0 :(得分:3)
可以在不使用let的情况下实现此目的。部分问题是默认映射中的冒号前缀,应省略。我认为你还需要引用整个参数图来使它工作。以下似乎是这样做的:
(defn printab [& {:keys [a b] :as m :or {a 5 b (:a m 5)}}]
(println "a is" a "b is" b))