- >>

2017-01-24 26 views
6

Ben clojure.core kaynağını gezen edildi:- >>

hattı 7 günü
(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))) 

, neden sadece

ama tamamen değil, neredeyse eşdeğer
(with-meta `([email protected] ~x) (meta form)) 

cevap

7

. Form (yanlış) () ise ne olacağını düşünün. Yazıldığı gibi, bu hata derleme zamanında yakalanır çünkü (nil x)'u değerlendirmek yasa dışıdır. Önerilen sadeleştirme işleminizle hata, çalışma zamanında fark edilir veya belki de hiçbir zaman x'un argümanların bir işlevi olmaması durumunda hiç fark edilmeyecektir.

Doğruyu bir kenara bırakarak okunabilirlik için de daha iyidir, çünkü formun ilkinin, geri kalanı argümanlar olarak çağrılacağını vurgular. Ayrıca ->'un uygulanmasıyla daha güzel bir simetri.

İlgili konular