Clojure 的 :gen-class and double arrays

标签 clojure java-interop gen-class

我正在尝试对一个 fn 进行 :gen-class ,它采用二维 double 组作为输入。我已经看过帖子和解决方案here关于类似的主题,但我仍然无法提供有效的解决方案。

(ns gui.heatmap
  (:gen-class
    :name gui.Heatmap
    :methods [[heat-map2 ["[[D"] org.jfree.chart.JFreeChart]]))

(defn foo [dbl-array]
  ...)

我使用 "[[D" 基于在我的输入上使用 type 。这可以很好地编译成 .class 文件。

现在,当我移动到另一个 .clj 文件时,我得到以下内容。

(ns ...
  (import (gui.Heatmap)))

(defn bar [args]
  ...
  (.foo
    (into-array
      (vector
        (double-array <list of numbers>)
        (double-array <list of numbers>)
        (double-array <list of numbers>)))))

当我从 repl 调用 bar 时,出现以下错误:

java.lang.IllegalArgumentException:未找到匹配字段:类 [[D

的 heat_map2

有什么想法吗?

最佳答案

您缺少该对象。 (.foo (to-array ...)) vs (.foo (Heatmap.) (into-array...))

请注意,您还应该需要您的gui.Heatmap命名空间。否则,如果 ... 命名空间在 gui.Heatmap 之前编译,您可能会遇到麻烦。然后导入失败,因为类还没有生成。添加 require 将解决此问题。

编辑:

澄清事情。

  • 修复丢失的对象
  • 添加要求
  • 修复前缀(dbyrne 的好收获!)
  • 修复 :import 子句(也是错误的)
(ns gui.heatmap
  (:gen-class
    :name gui.Heatmap
    :methods [[heat-map2 ["[[D"] org.jfree.chart.JFreeChart]]))

(defn -foo [dbl-array]
  ...)

(ns ...
  (import gui.Heatmap))

(defn bar [args]
  ...
  (.foo
    (Heatmap.)
    (into-array
      (vector
        (double-array )
        (double-array )
        (double-array )))))

关于Clojure 的 :gen-class and double arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318671/

相关文章:

c# - JNBridge可以在linux下使用吗?

list - Clojure - 将列表转换为 Java 数组

使用 gen-class Clojure 多个构造函数

clojure gen 类可变参数构造函数

clojure - 在 Clojure 中向值向量添加键

java - 关于性能和 Java 互操作性 : Clojure vs. Scala

clojure - 何时以及如何在 Clojure 中使用独立层次结构?

nullpointerexception - 为什么 HashMap.get 不返回可空类型?

clojure - 如何在 Clojure 中编写 monoid 协议(protocol)?

clojure - 我的简单 Clojure gen-class 脚本有什么问题?