我不理解clojure 1.5 发行说明中的这段代码。它使用cond->
宏。例如,它将如何转换为 1.5 之前的代码?
user=> (cond-> 1
true inc
false (* 42)
(= 2 2) (* 3))
6
我不理解clojure 1.5 发行说明中的这段代码。它使用cond->
宏。例如,它将如何转换为 1.5 之前的代码?
user=> (cond-> 1
true inc
false (* 42)
(= 2 2) (* 3))
6
如果测试为真,每一步都会改变结果,如果测试为假,则不处理。
您可以通过线程化匿名函数在 1.4 中编写:
user> (-> 1 (#(if true (inc %) %))
(#(if false (* % 42) %))
(#(if (= 2 2) (* % 3) %)))
6
虽然cond->
没有引入新功能,但它会生成一个更有效的绑定表单:
user> (let [g 1
g (if true (inc g) g)
g (if false (* g 42) g)
g (if (= 2 2) (* g 3) g)]
g)
6
并使用gensym
forg
以防某些表格使用该符号g
cond->>
非常相似,只是将螺纹符号放在不同的位置。
user> (let [g 1
g (if true (inc g) g)
g (if false (* 42 g) g)
g (if (= 2 2) (* 3 g) g)]
g)
6
在这个例子中,它给出了相同的结果,因为*
和+
是可交换的。