2012-02-01 49 views
7

Phương pháp được đề xuất định dạng các mệnh đề lớn bên trong câu lệnh cond trong Clojure là gì?cond với mệnh đề lớn

Ex:

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

Nếu kết quả là trên cùng một dòng như tình trạng này, kết quả kết thúc cách quá thụt vào, nhưng nếu kết quả và tình trạng này là những đường khác nhau, nó trở nên quá dễ dàng để mất theo dõi các điều kiện so với kết quả. Điều này có vẻ như một tình huống mà thường Lisp phong cách cond sẽ hữu ích, nhưng việc thêm các dấu ngoặc đơn (có thể là dấu ngoặc trong trường hợp của Clojure) dường như không giống như khóa học được đề nghị.

Trả lời

7

Trong nhiều trường hợp, các câu hỏi như mặc định này là "định dạng nó theo cách emacs". Không phải là tôi vốn đã ủng hộ triết lý này. Đó là ultimatly lên đến cảm giác của bạn thẩm mỹ

trong conds ngắn tôi thích:

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

cho những người thực sự dài như của bạn tôi muốn thêm một số dòng mới thêm như delimiters hình ảnh:

(cond 
    (clause) 
    (action) 

    (clause2) 
    (action2) 

vì vậy tôi sẽ định dạng mã của bạn:

(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 +))) 
Các vấn đề liên quan