我有一个功能“my-func
”,它处理地图x
它获取作为参数并返回一张地图。处理过程非常漫长,因此我将其转移到函数block-with-several-function-calls-on-x
如果传入地图包含:special-key
,则应将附加的键值对添加到传出地图中。什么是“做额外的东西,当...”的Clojure方式
(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)))
我真的想保持内my-func
的block-with-several-function-calls-on-x
的代码。我使用其他编程语言,我只是简单地将该部分的输出保存在一个变量中,并且(如有必要)之后添加附加部分并返回值。我被告知使用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)))
“使用让不是Clojuresque” - 这是荒谬和搞笑的错误,并说这个人不太了解Clojure – noisesmith 2014-11-25 15:06:14
也许有一些沟通不畅?例如,让我们不创建“变量”。无论如何,执行此操作的标准方法是使用let。 – noisesmith 2014-11-25 15:13:05