2009-07-29 18 views

cevap

37

İhtiyacım olan tek şey yerel bir işlevse veya 2 ... veya 3 ... Onları izin vereceğim. Fonksiyonların ve işlevlerin bir karışımına izin vermem gerekirse, sadece normal bir izin kullanacağım. letfning ve salıvermek bunu yapmak için çok ayrıntılı bir yol olacaktır. Bununla birlikte, yerel işlevlerinizde karşılıklı olarak özyinelemeye ihtiyacınız varsa, bunları iki şekilde de bırakmak zorunda kalacaksınız.

Kısa versiyon: Daha iyi göründüğünde ve uygun olduğunda bunları kullanın. Kullanmak için zor ve hızlı kurallar yoktur. Onlar sadece Clojure araç kutusundaki araçlar.

İyi eğlenceler! Bu şekilde tek bir formda fonksiyonları olmayan fonksiyonlar hem kümesi tanımlamak ve hatta önceki tanımlara dönüp bakabileceğiniz:

(let [f  (fn [x] ....) 
     value (reduce f some-collection) 
     foo bar] 
    .....) 

letfn gerçekten

18

Normalde let kullanımı daha kolay ve kıvrımlara var Sadece birbirini tekrarlayan birden çok işlevi tanımlamak istediğinizde gereklidir. Bu durumda let çalışmaz, çünkü özyinelemeli referansları desteklemez.

+0

Basit bir özyineleme için bile (vücudun kendisinde kullandığı bir işlev) bir letfn gerekli olduğunu unutmayın. – fmjrey

+3

Bir işlev şu şekilde kendini ifade edebilir: '(fn foo [x] .... (foo ...) ...)' – mikera

+0

Evet gerçekten! Her ne kadar izin veren bir formda, aynı fn için iki isme sahip olsa da (izin veren bir isim, diğeri fn biçiminde) ya da aynı adı iki kez tekrarlayarak, daha iyi olabilir. – fmjrey