给定->>
这样的管道:
(defn my-fn []
(->> (get-data)
(do-foo)
(do-bar)
(do-baz)))
我希望使各个阶段成为有条件的。
想到的第一种写法是这样的:
(defn my-fn [{:keys [foo bar baz]}]
(->> (get-data)
(if foo (do-foo) identity)
(if bar (do-bar) identity)
(if baz (do-baz) identity))
然而,当->>
宏试图插入if
表单时,这不仅在性能方面看起来很糟糕(有 noopidentity
调用),而且实际上无法编译。
写这篇文章的适当、合理干燥的方式是什么?