Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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
Java Clojure在对基元数组调用amap时失败_Java_Arrays_Clojure_Functional Programming_Interop - Fatal编程技术网

Java Clojure在对基元数组调用amap时失败

Java Clojure在对基元数组调用amap时失败,java,arrays,clojure,functional-programming,interop,Java,Arrays,Clojure,Functional Programming,Interop,在ClojureDocs上,它提到aset仅在引用java类型数组上可用。但是它没有提到amap的使用 (reduce (fn [#^doubles sum #^doubles prob] (println sum) (amap ^doubles sum idx ret (fn [x] (println x) (+ x (get prob idx))))) (double-array 3 (double 0)) [(double-array [1.0 2

在ClojureDocs上,它提到aset仅在引用java类型数组上可用。但是它没有提到amap的使用

(reduce
  (fn [#^doubles sum #^doubles prob]
    (println sum)
    (amap ^doubles sum idx ret 
      (fn [x] (println x) (+ x (get prob idx)))))
  (double-array 3 (double 0))
  [(double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])])
上述代码失败,并显示以下错误消息

IllegalArgumentException未找到匹配方法:aset clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:80)

在这种情况下,似乎无法使用amap

我有两个问题:

  • 对于简单的映射逻辑,有没有简单的方法返回一个基元数组
  • 原语数组为什么不支持aset

您不正确地使用了
amap
。amap的最后一个参数应该是一个表达式,而不是您所使用的函数(如法线贴图)

(reduce
  (fn [^doubles sum ^doubles prob]
    (println sum)
    (amap ^doubles sum idx ret 
      (+ (aget sum idx) (aget prob idx))))
  (double-array 3 (double 0))
  [(double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])
   (double-array [1.0 2.0 3.0])]) 

如果数组中的元素数量较少,则可以使用
map

(apply map + [(double-array [1.0 2.0 3.0])
              (double-array [1.0 2.0 3.0])
              (double-array [1.0 2.0 3.0])
              (double-array [1.0 2.0 3.0])
              (double-array [1.0 2.0 3.0])])

=> (5.0 10.0 15.0)

看起来更干净。如果您真的需要,您可以将计算的最终结果通过
转换为数组。

谢谢,安库,这是我的错误!