实现返回double的方法:不匹配
问题描述:
尝试将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))
从DistanceMeasure
的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)))))
这很奇怪,因为它适用于其它类似的接口。
感谢
答
这解决了这个问题:
(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
DistanceMeasure
(compute ^double [this a b] (f ^doubles a ^doubles b)))
不相同类型的内部提示:我必须删除参数提示和它的作品。我不知道这是否是Clojure缺乏的问题。