2012-02-01 107 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 +)))