我正在使用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并想出第二个参数。当我需要的是@(第二%)。即第一个也是唯一一个参数的第二个条目。
答案 0 :(得分:2)
作为map
的第二个参数的函数在这种情况下必须只接受一个参数(这是一个正在被遍历的seq的元素)。
您似乎错误地将2个参数传递给函数并传递1个参数,该参数是2个元素的向量。
你想写的是
(map (fn [[a b]] (vector a @b)) x)
...而你目前所写的内容相当于:
(map (fn [a b] (vector a @b)) x)
事实上,这不是关于承诺的问题。