在将副作用代码与赋值混合时使用嵌套的let惯用法?

时间:2015-03-31 01:12:45

标签: clojure

我有一些代码需要先插入db然后再从db中查询。我可以使用嵌套的let,如下所示:

 (let [sql "sql text"]
    (clojure.java.jdbc/insert! ...)
    (let [query-result (clojure.java.jdbc/query ...)]
      (some-code-using query-result)))

或使用一个let但使用一些虚拟变量,如下所示:

(let [sql "sql text"
      dummy (clojure.java.jdbc/insert! ...)
      query-result (clojure.java.jdbc/query ...)]
  (some-code-using query-result))

哪一个在clojure中更好,更典型?

2 个答案:

答案 0 :(得分:3)

“虚拟”变量的规范名称是_,并且会明确表示您不打算使用该调用的结果。与嵌套的_电话相比,使用let也更容易理解。

(let [sql "sql text"
      _ (clojure.java.jdbc/insert! ...)
      query-result (clojure.java.jdbc/query ...)]
  (some-code-using-query-request))

答案 1 :(得分:0)

嵌套let表单没有任何问题,我会说你的例子中的前者是最可读的,这要归功于更清晰的意图分离。