我经常发现自己写这样的函数:
(defn my-function [arg]
(let [x (foo arg)
y (bar x)
z (baz x)]
(make-result y z)))
因此,我不是编写(make-result (bar (foo arg)) (baz (foo arg)))
而是将代码拆分为一组临时绑定。 (当然,通常绑定比这个简单的例子更复杂。)
我并不特别喜欢核心功能逻辑包含在let绑定中。
编写这样的代码序列是否有更好的约定?
答案 0 :(得分:3)
这是惯用的,let
是明确顺序的,并且预计会以这种方式使用。特别是因为这避免了两次调用(foo arg)
(Clojure不是那么纯粹,以至于编译器可以自动将其转换为对foo
的单个调用)。