2017-10-11 53 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缺乏的问题。

相关问题