2015-06-27 29 views
5

Bir bağlama nesnesinin içinde bir alt çizgi ne yapar, bu yüzden (let [a blabla _ (println a)] etc.... yazıyorsa bu alt çizgi anahtar kelimenin yerinde ne yapıyor?Clojure'ın ciltleme biçimindeki alt çizgi kullanımı nedir?

+0

daha conceret örnektir ]: veya {d 10 b 20 c 30}} {: c 50: d 100} [efg & h] ["a" "b" "c" "d" "e"] _ (println "Ben burada! ") foo 12 bar (+ foo 100)] [a b c d e f g h foo bar]) Buradaydım! [(0 1 2 3 4) 20 50 100 "a" "b" "c" ("d" "e") 12 112] ' – amirteymuri

cevap

3

Alt çizgi evrensel göz ardı simgesidir.

İzin verilen formdaki her sexp için bir dönüş değeri olmalıdır ve println nil değerini döndürür, böylece kişilere dönüşü göz ardı ettiğinizi ve bu noktada hata ayıklama yaptığınızı bildirmek için _ olarak ayarlayabilirsiniz. Örneğin.

(let [foo (+ 1 2) 
     _ (println "debug! foo is" foo) 
     _ (println "more debug!" (+ 1 foo)] 
    foo) 

sexp her değerlendirme değerine _ döndü setleri, ama o kadar sadece gibi okumak, gerekli değil. Eğer size may kullanımını _ kullanarak olmayacak bir tanımlayıcı vardır, ama ne zaman Geleneksel olarak

(let [_ 1] 
    (println _)) 
=> 1 

öyle: Bu örnek kod tarafından görebileceğiniz gibi

+0

harika, teşekkürler. Yani sadece boşluk doldurma ve hata ayıklama uğruna mı? - – amirteymuri

+0

Evet, sadece yan etkiler –

+1

Terminoloji üzerine bir not: _ bir değer değil, bir sembol. (class (quote _)), clojure.lang.Symbol 'i döndürür. Semboller alıntılanmalı veya eVALUE olsun (sınıf _), alt-çizgilerin şu anda bağlı olduğu değerin sınıfını döndürecektir. – JBiserkov

11

alt çizgi, geçerli bir sembol kimliğidir zorunlu değil.

bunun dışındaki

strüktür durumlara da olur (senin durumunda println çizgi böylece bir sembol ile sonuç bağlayıcı olmayacak nil döner) hem örnekteki gibi yan etki durumlar için Olur Bazı değerlere ihtiyacım var. Eğer 2. ve 3. değerler ilgilenmiyoruz Bu durumda

(let [[a _ _ d] [1 2 3 4]] 
    (println a)) 
=> 1 

, böylece tanımlayıcı _ umursamıyorsun söylediğim için deyimseldir. Düzenli Clojure'da _ alt çizgisi, başka herhangi bir sembol gibi (örn. "Önemsiz") ele alınır. Ancak bazı kütüphanelerde özel bir anlamı vardır. Örneğin, Datomic'te _, ciltlemeyi/birleştirmeyi engelleyen bir "joker" gibi kabul edilir. Clojure.core.match dosyasında, _ da bir joker karakter olarak kabul edilir.

bakınız: 'Kullanıcı => (izin [a (5 (aralık)) {alır: tuşları [BCD

+0

harika değiştirdim, teşekkür ederim. Yani sadece boşluk doldurma ve hata ayıklama uğruna mı? – amirteymuri

+0

Sanırım bunu söyleyebilirsin –

İlgili konular