- >>

2017-01-24 2 views
6

내가 clojure.core의 원인을 탐색 하였다- >>

7 호선에
(defmacro ->> 
    [x & forms] 
    (loop [x x, forms forms] 
    (if forms 
     (let [form (first forms) 
      threaded (if (seq? form) 
         (with-meta `(~(first form) [email protected](next form) ~x) (meta form)) 
         (list form x))] 
     (recur threaded (next forms))) 
     x))) 

, 왜 그냥

하지만 꽤 거의 동등의
(with-meta `([email protected] ~x) (meta form)) 

답변

7

. 양식이 (잘못) () 인 경우 어떻게 될지 고려하십시오. 작성한대로이 오류는 컴파일시에 잡히며 (nil x)을 평가하는 것은 불법입니다. 제안 된 단순화를 사용하면 런타임에 오류가 표시되거나 x이 인수가없는 경우 오류가 발생합니다.

정확도는 그대로두고 나머지는 인수로 사용하여 양식의 첫 번째 항목을 강조하므로 가독성을 높이는 것이 좋습니다. -> 구현을 통해 더 멋진 대칭입니다.

관련 문제