clojure - cond 与大子句

标签 clojure

在 Clojure 中的 cond 语句内格式化大型子句的推荐方法是什么?

例如:

(cond
 (> (large-function large-arg1
                    large-arg2
                    large-arg3)
    long-var-name))
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +))
 (> (large-function large-arg4
                    large-arg5
                    large-arg6)
    long-var-name))
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +))
 (> (large-function large-arg7
                    large-arg8
                    large-arg9)
    long-var-name))
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +)))

如果结果与条件位于同一行,则结果会过于缩进,但如果结果和条件位于不同行,则很容易丢失条件与结果的关系。这似乎是 Common Lisp 风格 cond 很有用的情况,但添加括号(在 Clojure 的情况下可能是括号)似乎不是推荐的做法。

最佳答案

在许多情况下,像这样的问题默认为“按照 emacs 的方式格式化”。并不是说我本质上支持这种哲学。最终还是取决于你的审美

简而言之,我喜欢:

(cond
  (clause1) (action)
  (clause2) (action)

对于像你这样很长的内容,我喜欢添加一些额外的换行符作为视觉分隔符:

(cond
   (clause)
   (action)

   (clause2)
   (action2)

所以我会格式化你的代码:

(cond
 (> (large-function large-arg1
                    large-arg2
                    large-arg3)
    long-var-name)
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +))

 (> (large-function large-arg4
                    large-arg5
                    large-arg6)
    long-var-name)
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +))

 (> (large-function large-arg7
                    large-arg8
                    large-arg9)
    long-var-name)
 (->> (iterate #(* % 6) 1)
      (take 10)
      (apply +)))

关于clojure - cond 与大子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105094/

相关文章:

java - 在java程序中嵌入swank-clojure

clojure - Clojure 中的快速素数生成

macros - 如何处理来自 Clojurescript 宏所需的 Clojurescript 代码?

clojure - 命名空间映射命名空间上的多方法调度

clojure - 在迭代序列时特殊处理最后一个元素

macros - 在 Clojure 中将宏分解为宏或函数之间有什么区别吗?

clojure:使用 korma 动态组合查询

javascript - Clojure、JavaScript (ECMA) 和 MCLR

google-app-engine - lein appengine-prepare 失败

emacs - 如何在 Clojure 模式下导航到当前缓冲区中的函数