cond with big clauses

时间:2012-02-01 23:41:21

标签: 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案例中的括号)似乎不是推荐的课程。

1 个答案:

答案 0 :(得分:7)

在许多情况下,像这样的问题默认为“按照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 +)))