2013-04-11 19 views
6

Dizginin src'sine bakıyordum? fn ve birkaç soru vardı. Bir fn statik meta yapmak vererek neyidizginin kaynağıyla ilgili sorular?

(def 
^{:arglists '([x]) 
    :doc "Return true if x is a String" 
    :added "1.0" 
    :static true} 
string? (fn ^:static string? [x] (instance? String x))) 
  1. - Aşağıda string? fn kaynağıdır?
  2. Neden iki kez verilen statik meta veriler, ya fn için veya var için belirtmek için yeterli olmamalıdır?
  3. Anonim neden bir adı var?
+3

1. burada yanıtlandı: http://stackoverflow.com/questions/7552632/what-does-static-do-in-clojure –

cevap

4

1. ve 2. yanıtlar için, d.j.sheldrick'in soru hakkındaki yorumuna bakın. Cevap 3:

Öncelikle, burada bu konuyla ilgili olmamakla birlikte, isimlendirilen işlevler isimleriyle kendilerine atıfta bulunabilirler. Bu, kendilerini değer olarak döndürmelerine veya recur yerine normal çağrı mekanizması aracılığıyla kendilerini çağırmasına olanak tanır. Önemli olarak, bu, tembel sekq üreten fonksiyonlar için doğru self-call stratejisidir; in an earlier SO answer'un nedenlerine girdim ("Nasıl olur da tembel bir sekilde özyinelemeli çağrılar yapabilirsin?" İkinci olarak, fonksiyonlar JVM sınıflarına derlenmiştir. Sınıflar, işlevin adlandırılmamış olması durumunda işlevin tanımlandığı ad alanına dayalı Clojure derleyicisi tarafından adlandırılır; aksi halde isim, sınıf için daha anlamlı bir isim oluşturmak için kullanılır. Bu, yığın izlerini daha anlaşılabilir hale getirdiğinden, hata ayıklama için kullanışlıdır.

İlgili konular