Clojure Java Interop - NoSuchMethodErrors

时间:2015-04-07 17:41:25

标签: clojure clojure-java-interop

我一直在尝试使用Clojure及其Java互操作功能进行一些简单的测试,并且遇到了一些问题。我正在与Parallel Colt Java库连接,尝试LU factorization - Parallel Colt提供的一项功能。我看到了表单的错误

NoSuchMethodError edu.emory.mathcs.utils.ConcurrencyUtils.getThreadsBeginN_1D ”......

以下是我正在使用的一些简单代码:

(ns colt-test.core
(:import [cern.colt.matrix.tdouble DoubleMatrix1D DoubleMatrix2D]
         [cern.colt.matrix.tdouble.impl DenseDoubleMatrix2D DenseDoubleMatrix1D]
         [cern.colt.matrix.tdouble.algo.decomposition DenseDoubleLUDecomposition]
         [cern.colt.list.tdouble DoubleArrayList])

;; make a 1D double array, size N of random values up to val
(defn make-1D-rand-array [N val]
  (let [v (repeatedly N #(rand val))]
    (double-array v)))

;; make a 2D double array, size NxN of random values up to val
(defn make-2D-rand-array [N val]
  (let [v (repeatedly N #(make-1D-rand-array N val))]
    (into-array v)))

;; Test LU factorization
;; matrix A size 10 x 10, random values
(def A (DenseDoubleMatrix2D. (make-2D-rand-array 5 10.0)))

;; vector b of size 10, random values
(def b (DenseDoubleMatrix1D. (make-1D-rand-array 5 10.0)))

我可以在“b”,DenseDoubleMatrix1D上调用一些函数,例如size()和elements()。另外,我可以打电话给

set(int index, double value)

使用clojure interop语法

(.set b 0 10.5)

它会将“b”的第一个元素更新为10.5。

但是,当我在“b”上调用其他一些方法时,例如

assign(double value) 

as

(.assign b 10.0)

将b的所有元素设置为10.0,我得到一个NoSuchMethodError。从本质上讲,我似乎有正确的调用一些互操作方法,但没有其他人,我不知道我做错了什么。

我在尝试

时看到同样的错误
(DenseDoubleLUDecomposition. A)

供参考,这里是并行colt javadoc(http://incanter.org/docs/parallelcolt/api/) 注意,我使用的是稍微更新版本的平行小马。

1 个答案:

答案 0 :(得分:1)

我已经想出如何让它发挥作用。我使用的是parallel-colt 0.10.0,当我升级到版本0.10.1时,一切都按预期工作。

希望这有助于某人。