2017-10-11 84 views
0

嘗試將clojure函數包裝到Java接口中時遇到問題。 這裏是例如:實現返回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)) 

DistanceMeasurecompute方法(阿帕奇數學)應該返回。然而,無論我嘗試什麼類型的暗示(在使用^之前的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缺乏的問題。

相關問題