Clojure-更习惯于返回闭包,还是部分应用函数?
我正在使用一个外部库,并将我编写的函数传递给它。例如,类似这样的事情:Clojure-更习惯于返回闭包,还是部分应用函数?,clojure,functional-programming,Clojure,Functional Programming,我正在使用一个外部库,并将我编写的函数传递给它。例如,类似这样的事情: (defn my-func [mydata] (fn [] (... access to mydata via closure ... ))) (ext-func (my-func somedata)) (ext func my func). my func需要提供一些数据来进行计算。在我看来,我有两个基本选择: 1) 编写my func,使其接受我的数据并返回一个函数,当外部库调用该函数时,该函数将通过
(defn my-func
[mydata]
(fn []
(... access to mydata via closure ... )))
(ext-func (my-func somedata))
(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))
我想应该使用哪一个可以通过我打算如何使用该函数来回答。例如,如果我打算在其他地方使用它,我可能不希望返回函数。但是,在其他条件相同的情况下
…以下哪种方法更惯用?
部分
只是创建匿名函数的糖分。看看这是什么。所以,实际上它们是等价的。你挑吧。两者都不是更惯用的,只是个人喜好的问题。使用fn的一个好处是,您可以提供一个符号作为第一个参数,然后它将出现在任何堆栈跟踪中,而不是部分堆栈跟踪中。