2017-10-11 1 views
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))))) 

それは他の類似のインターフェイスのために働くので、これは奇妙な動作しませんでした。

おかげ

答えて

0

これは、問題を解決:

インナータイプヒントなしの同じ
(deftype ClojureDistanceMeasure [^clojure.lang.IFn f] 
    DistanceMeasure 
    (compute ^double [this a b] (f ^doubles a ^doubles b))) 

:私は、引数のヒントを削除する必要があり、それが動作します。それがClojureの問題の一部を欠いているかどうかは分かりません。

関連する問題