实现返回double的方法:不匹配

时间:2017-10-11 09:52:11

标签: clojure type-hinting

我在尝试将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

这很奇怪,因为它适用于其他类似的接口。

由于

1 个答案:

答案 0 :(得分:0)

这解决了这个问题:

(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
  DistanceMeasure
  (compute ^double [this a b] (f ^doubles a ^doubles b)))

同样没有内部类型提示:我必须删除参数提示并且它有效。我不知道Clojure是否缺少一部分问题。