cond with big clauses

Ret*_*ief 7 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 +)))
Run Code Online (Sandbox Code Playgroud)

如果结果与条件在同一行,则结果也会缩进,但如果结果和条件是不同的行,则很容易失去条件与结果的跟踪.这似乎是Common Lisp样式cond会有用的情况,但添加括号(在Clojure的情况下可能是括号)似乎不是推荐的课程.

Art*_*ldt 7

在许多情况下,像这样的问题默认为"以emacs的方式格式化".并不是说我天生就支持这种哲学.它最终取决于你的美学意识

总之,我喜欢:

(cond
  (clause1) (action)
  (clause2) (action)
Run Code Online (Sandbox Code Playgroud)

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

(cond
   (clause)
   (action)

   (clause2)
   (action2)
Run Code Online (Sandbox Code Playgroud)

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

(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 +)))
Run Code Online (Sandbox Code Playgroud)