Как выполнить явное приведение в clojure при взаимодействии с java

Пытаясь использовать weka из clojure, я пытаюсь преобразовать это практическое руководство из вики weka в clojure, используя java особенности взаимодействия clojure.

До сих пор это работало хорошо, за исключением одного случая, когда механизм отражения clojure не может найти правильный метод для вызова -У меня есть:

(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))

Позже это будет вызвано методом .evaluateModelкласса Evaluation:

(.evaluateModel e-test c-model is-testing-set)

, где e-testимеет тип weka.classifiers.Evaluationи, согласно их документации API , метод принимает два параметра типов Classifierи Instances

. Что я получаю от clojure, хотя этоIllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)-Я предполагаю, что это потому, что c-modelна самом деле имеет тип NaiveBayes, хотя он также должен быть Classifier-, которым он является, согласно instance?.

Пробовал приведение с помощью castбезрезультатно, и насколько я понимаю это больше похоже на утверждение типа (и проходит без проблем, конечно ), чем реальное приведение в clojure. Есть ли другой способ явно указать clojure, к каким типам приводить вызовы методов взаимодействия java? (Обратите внимание, что исходное руководство, на которое я ссылался выше, также использует явное приведение от NaiveBayesкClassifier)

Полный код здесь :/http://paste.lisp.org/display/129250

6
задан Yefim Dinitz 3 May 2012 в 17:08
поделиться