在Clojure中,使用不使用参数定义匿名函数的惯用方法是什么?

时间:2013-08-11 01:34:42

标签: clojure anonymous-function

而不是:

(run-jetty (fn [request] (response "hello")) 6789)

我想要(忽略给定参数):

(run-jetty #(response "hello") 6789)

即,我想使用匿名函数来保存一些输入。很明显,它会在运行时引发错误,因为匿名函数将被赋予一个它不想处理的参数(即请求)。那么实现这一目标的惯用方法是什么?

2 个答案:

答案 0 :(得分:3)

这取决于您的确切用途,但我会使用constantly功能。

(run-jetty (constantly (response "hello")) 6789)

如果您尝试使用匿名函数延迟计算,那么这将无效(提示:在这种情况下使用delayforce),但对于环处理程序,它将很好地工作

答案 1 :(得分:3)

我发现我的问题与this one重复。

此外,我发现constantly确实是常量:它会缓存子序列使用的结果。虽然这不是我想要的,但最好知道:

demo1.core=> (defn foo [] (rand))
#'demo1.core/foo
demo1.core=> (def aa (constantly (foo)))
#'demo1.core/aa
demo1.core=> (aa)
0.8006471724049917
demo1.core=> (aa 1)
0.8006471724049917
demo1.core=> (aa 1 2)
0.8006471724049917

以防万一像我这样的人正在寻找同样的事情。