3

我正在尝试 :gen-class 一个 fn,它将一个二维数组作为输入。我已经在这里看到了关于类似主题的帖子和解决方案,但我仍然无法产生有效的解决方案。

(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>)))))

当我bar从 repl 调用时,我收到以下错误:

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

有什么想法吗?

4

2 回答 2

3

您缺少对象。(.foo (into-array ...))对比(.foo (Heatmap.) (into-array...))

请注意,您还应该使用require您的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 )))))
于 2010-07-23T13:54:26.367 回答
2

Kotarak 的回答很好。然而另一个问题是你需要命名你的函数-foo而不是foo. 要么,要么改变:prefix里面:gen-class

于 2010-07-23T15:11:40.810 回答