2012-02-01 77 views
7

在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 +))) 

如果结果是在同一行的条件下,结果呢?太缩进,但如果结果和条件是不同的线路,它变得太容易失去条件vs结果的跟踪。这似乎是Common Lisp风格cond会有用的一种情况,但添加括号(可能在Clojure的情况下为括号)并不像推荐的过程那样。

回答

7

在许多情况下,这样的问题默认为“以emacs的方式进行格式化”。并不是说我本质上支持这种哲学。这是ultimatly到你的美学

总之conds的意义上,我想:

(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 +)))