Arity例外deref'ing承诺

时间:2014-08-10 11:48:54

标签: clojure promise dereference

我正在使用http-kit库制作一些网络摄像头,并为每个都返回一个承诺。 当我尝试deref向量中的任何promise时,我得到以下错误

ArityException传递给args(1)的错误数量为:core / eval5473 / fn - 5474 clojure.lang.AFn.throwArity(AFn.ja VA:429)

在没有http-kit的情况下在repl中重现的最简单方法如下

创建集合

(def x [ [1 (promise)] [2 (promise)] [3 (promise)]])

简单测试

(map first x)
;user=>  (1 2 3)

我的测试

(map #(vector % @%2) x)
;user=> ArityException Wrong number of args (1) passed to: user/eval109/fn--110  clojure.lang.AFn.throwArity (AFn.java
:429)

更新

我应该删除这个问题。这个问题与承诺无关,正如Valentin在下面提到的那样。 我正在输入%2并想出第二个参数。当我需要的是@(第二%)。即第一个也是唯一一个参数的第二个条目。

1 个答案:

答案 0 :(得分:2)

作为map的第二个参数的函数在这种情况下必须只接受一个参数(这是一个正在被遍历的seq的元素)。

您似乎错误地将2个参数传递给函数并传递1个参数,该参数是2个元素的向量。

你想写的是

(map (fn [[a b]] (vector a @b)) x)

...而你目前所写的内容相当于:

(map (fn [a b] (vector a @b)) x)

事实上,这不是关于承诺的问题。