我在尝试将clojure函数包装到Java接口时遇到了麻烦。 这是一个例子:
(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
(apache数学)的DistanceMeasure
方法应该返回。但是,无论我尝试何种类型的提示(在带有^的args之前,包装成一个暗示的匿名函数),progrom都拒绝编译:{{1}}。
这是一个已知问题吗?有没有办法覆盖它(即使使用Java代码)?
我甚至尝试过愚蠢的代码,也没用过
mismatched return type, expected:double, had : java.lang.Object
这很奇怪,因为它适用于其他类似的接口。
由于
答案 0 :(得分:0)
这解决了这个问题:
(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
DistanceMeasure
(compute ^double [this a b] (f ^doubles a ^doubles b)))
同样没有内部类型提示:我必须删除参数提示并且它有效。我不知道Clojure是否缺少一部分问题。