3

Double の 2D 配列を入力として取る fn を :gen-class しようとしています。同様のトピックに関する投稿と解決策をここで既に見ましたが、まだ実用的な解決策を作成できません。

(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

何かご意見は?

4

2 に答える 2

3

オブジェクトがありません。(.foo (into-array ...))(.foo (Heatmap.) (into-array...))

名前空間も必要であることに注意してrequireください。そうしないと、名前空間がgui.Heatmapの前にコンパイルされた場合に問題が発生する可能性があります。クラスがまだ生成されていないため、インポートは失敗します。を追加すると、この問題は解決します。...gui.Heatmaprequire

編集:

物事を明確にする。

  • 不足しているオブジェクトを修正
  • 追加する必要があります
  • 接頭辞を修正 (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

コタラックの答えは良いです。-fooただし、別の問題は、の代わりに関数に名前を付ける必要があることですfoo。それか、:prefix中身を変えるか:gen-class

于 2010-07-23T15:11:40.810 に答える