0
Javaインターフェイスにclojure関数をラップしようとしたときに問題があります。ここ は例である:DistanceMeasure
(Apacheの数学)からdoubleを返すメソッドを実装する:不一致
(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
DistanceMeasure
(compute ^double [this ^doubles a ^doubles b] (double (f a b))))
(defn ->distance-measure
^DistanceMeasure
[^clojure.lang.IFn f]
(ClojureDistanceMeasure. f))
compute
方法を返すようになっています。しかし、どんなタイプのヒントを試しても(^でargsの前に、暗黙の無名関数にラップする)、progromはコンパイルを拒否する:mismatched return type, expected:double, had : java.lang.Object
。
これは既知の問題ですか?これをオーバーライドする方法はありますか(Javaコードでも)?
私も愚かなコードを試してみましたが、あまりにも
(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
DistanceMeasure
(compute [this ^doubles a ^doubles b] (let [result (f a b)] (double (+ result 0.0)))))
それは他の類似のインターフェイスのために働くので、これは奇妙な動作しませんでした。
おかげ