我常常以这样的代码结束,我只是为了保持状态而创建临时变量。有什么更好的方法呢?
画眉操作员不会帮助,因为虽然e是临时的,但我仍然需要连续的let形式中的c和d。
(let [[c d] (sum [a b])
e (if (even? c) c 0)
f (+ s e)]
.....
)
答案 0 :(得分:3)
这对我来说很好看。 “国家”实际上并不是一个国家 - 没有任何副作用。如果let
中存在大量绑定并且它们的依赖变得难以跟踪,那么它可能会变得很糟糕,但这是复杂代码(duh)的一般属性,而不是特定于此模式。
答案 1 :(得分:2)
我认为这种模式没有任何问题。在这种情况下,您需要创建临时变量,因为各种操作不能直接组合,因此您可以使用临时变量来使它们工作。
答案 2 :(得分:1)
我看到你可以通过几种方式重新组织它。我认为这两者在客观上都不比你写的更好,但我会把它作为思考的食物发布。
(let [c (first (sum [a b]))
f (+ s (if (even? c) c 0))]
...)
或者这个
(defn evenz [n]
(if (even? n) n 0))
(let [f (+ s (evenz (first (sum [a b]))))]
...)
答案 3 :(得分:1)
从我的角度看,这看起来相当清晰“功能样式”代码。我发现它没有任何问题,只是名字有点短;-)
或许更多的背景会导致建设性的建议?