我正在尝试对一个 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/