【发布时间】:2015-01-23 07:36:58
【问题描述】:
我有一个函数“my-func”,它处理作为参数获取的映射x 并返回一个映射。处理时间很长,所以我把它转移到函数block-with-several-function-calls-on-x
如果传入映射包含:special-key,则应在传出映射中添加一个额外的键值对。
(defn my-func [x]
(if (contains? x :special-key)
(assoc (block-with-several-function-calls-on-x x)
:extra-key true)
(block-with-several-function-calls-on-x x)))
我真的很想将block-with-several-function-calls-on-x 的代码保留在my-func 中。对于其他编程语言,我只需将该部分的输出保存在变量中,然后(如有必要)添加附加部分,然后返回值。有人告诉我使用let 不是“Clojuresque”。
那么将代码转移到函数(就像我上面所做的那样)是唯一的方法吗?或者是do-additonal-stuff-to-output-of-second-block-function:
(defn my-func [x]
(do-additional-stuff-to-output-of-second-block
(when (contains? x :special-key)
(assoc :extra-key true))
(block-with-several-function-calls-on-x x)))
【问题讨论】:
-
“使用 let 不是 Clojuresque”——这是荒谬和可笑的错误,说它的人对 Clojure 了解不多
-
也许是沟通不畅?例如, let 不会创建“变量”。无论如何,执行此操作的标准方法是使用 let。
标签: clojure functional-programming conditional