Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure-更习惯于返回闭包,还是部分应用函数?_Clojure_Functional Programming - Fatal编程技术网

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的一个好处是,您可以提供一个符号作为第一个参数,然后它将出现在任何堆栈跟踪中,而不是部分堆栈跟踪中。