2016-06-10 21 views
1

我正在使用外部庫,並將其傳遞給我編寫的函數。像這樣的事情,例如:Clojure - 更習慣於返回閉包,還是部分應用函數?

(ext-func my-func) ...

my-func需要給予一定的數據做計算。我看到它的方式有兩種基本的選擇:

1)以這種方式寫my-func,它接受我的數據並返回一個函數,然後通過閉包將數據綁定到外部庫調用它。例如:

(defn my-func 
    [mydata] 
    (fn [] 
    (... access to mydata via closure ...))) 

(ext-func (my-func somedata)) 

2)不要從my-func返回功能,但數據綁定到它時,我把它傳遞給ext-func

(defn my-func 
    [mydata] 
    (... evaluate, use mydata, etc.)) 

(ext-func (partial my-func somedata)) 

我想使用哪一個可以通過怎樣回答我打算使用該功能,否則。例如,如果我要在其他地方使用它,我可能不想返回一個函數。但是,所有其他的東西都是相同的......

......這些是哪種更習慣的方法?

回答

2

partial只是糖來創建匿名函數。看看它的source。所以,他們實際上是相同的。拿你的選擇。都不是更習慣,只是個人喜好的問題。

+1

使用fn的一個好處是你可以提供一個符號作爲第一個參數,然後出現在任何堆棧跟蹤中而不是部分。 – spieden

相關問題