Clojure - 更多惯用于返回闭包,还是部分应用函数?

时间:2016-06-10 20:51:37

标签: clojure functional-programming

我使用外部库,并将其传递给我写的函数。像这样的东西,例如:

(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))

我想如果我打算如何使用该功能,可以回答使用哪一个。如果我要在其他地方使用它,我可能不想返回一个功能,例如。但是,所有其他事情都是平等的......

......其中哪一种更惯用?

1 个答案:

答案 0 :(得分:2)

partial只是创建匿名函数的糖。看看它是source。所以,实际上它们是等价的。随便挑选。两者都不是惯用语,只是个人偏好。