2013-04-15 27 views
12

Ben clojure neşesi ile çalışıyorum ve _ sözdiziminin bir işlev argümanında ne yaptığını merak ediyorum.Clojure: [_] Bir İşlevler Argüman Listesinde ne yapar?

Örnek:

(def available-processors 
    (.availableProcessors (Runtime/getRuntime))) 

(prn "available processors: " available-processors) 

(def pool 
    (Executors/newFixedThreadPool (+ 2 available-processors))) 

(defn dothreads! 
    [func & {thread-count :threads exec-count :times :or {thread-count 1 exec-count 1}}] 
    (dotimes [t thread-count] 
     (.submit pool #(dotimes [_ exec-count] (func))))) 

çizgi şeklinde yapıyor Ne: Bu konuda

#(dotimes [_ exec-count] (func)) 
+0

Haskell'de _, gerçekten umursamadığınız bir şeyi ifade eder. Hepsini bir "her şey" gibi. "Burada her neyse" değişkeni. Clojure'da benzer olup olmadığını görmek ister misiniz? – Shark

cevap

13

Alt satırın Clojure'de, kural gereği, gerekli ancak kullanılmamış bir argüman için yer tutucu olarak kullanıldığına inanıyorum. Keith Bennet söylediği gibi: Clojure içinde

, alt çizgi o tanımlayan argüman sonradan kullanılmaz belirtmek için deyimsel kullanılır.

Sizin örnek, bir dizin olduğunu dotimes ilk argüman, ihtiyaç olmadığı için "kullanım" bu tutarlı olmakla bağlayıcı formu gereklidir.

+1

Bunun inanıyorum ki haskell. –

+2

ve haskell muhtemelen prolog'dan aldı. Yine de nerede başladığından emin değilim. – bmaddy

10

Özel bir şey, o önemsediğiniz bir şeyi adlandırmak için sadece bir kuralıdır ama yine de bir isim ve normal bir isim gibi kullanılabilir. Bunu yapmak

(defn hello [_] (+ 1 _)) 
(hello 10) 

GÜNCELLEME

:

(defn hello [a a] (+ a a)) 

bir hata üretmez ve istediğiniz kadar dolayısıyla _ gibi birçok kullanabilirsiniz;).

NOT: Yukarıda Şema veya CL ... ile ilgili durum geçerli değil. Hmm o zaman clojure içindeki rasyonel neydi ???

+0

Bu durum ile sembolün aslında hiçbir yerde kullanılmadığı, ancak imza için gerekli olduğu durumu ayırt edermisiniz? Ben böyle anladım. Başka bir deyişle, ben şahsen ben gerçekten başvurulan nerede '_' kullanmadım. – harpo

+1

@harpo Clojure derleyicisi ve çalışma zamanı söz konusu olduğunda, '_' özel bir semantik olmayan sıradan bir semboldür. Sözleşme gereği, Clojure geliştiricileri '_', 'ihmal' veya 'dont-care' gibi bir şey yerine' _' kullanırlar, çünkü '_' daha kısadır ve kendine özgüdür. Tabii ki, konvansiyonu takip etmekte özgürsünüz. Ben şahsen Ankur'un örneğinin yaptığı gibi kullanmayacağım; Onun durumunda, sembol aslında bir yere atıfta bulunur. – user100464