【问题标题】:Implement methods which returns double : mismatch实现返回 double 的方法:不匹配
【发布时间】:2018-03-22 22:42:05
【问题描述】:

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

DistanceMeasure(apache 数学)中的 compute 方法应该返回。但是,无论我尝试哪种类型的提示(在 args 之前,使用 ^,包装成一个提示的匿名函数),程序都拒绝编译: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)))))

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

谢谢

【问题讨论】:

    标签: clojure type-hinting


    【解决方案1】:

    这解决了问题:

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

    没有内部类型提示也一样:我必须删除参数提示并且它可以工作。我不知道这是否是 Clojure 缺少问题的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2016-03-15
      相关资源
      最近更新 更多