2017-10-11 5 views
0

J'ai du mal à essayer une fonction clojure dans une interface Java. Voici l'exemple:Implémente les méthodes qui retournent le double: discordance

(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)) 

est censé retourner la méthode compute de DistanceMeasure (apache mathématiques). Cependant, quel que soit le type d'indice que j'essaie (avant les arguments avec ^, retournez dans une fonction anonyme sous-entendue), le programme refuse de compiler: mismatched return type, expected:double, had : java.lang.Object.

Est-ce un problème connu? Existe-t-il un moyen de contourner cela (même avec du code Java)?

J'ai même essayé le code stupide, ne fonctionnait pas trop

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

Ceci est étrange parce que cela fonctionne pour d'autres interfaces similaires.

Merci

Répondre

0

Cela résout le problème:

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

même sans indications de type interne: Je dois supprimer des notes d'arguments et il fonctionne. Je ne sais pas si c'est un Clojure qui manque une partie du problème.