Próbując użyć weka z clojure, staram się przekonwertować this howto guide z wiki weka na clojure, używając funkcji java interop z clojure.Jak jawnie rzutować w clojure podczas łączenia z java
Ten pracował dobrze do tej pory, z wyjątkiem jednego przypadku, w którym mechanizm clojure odbicie nie może wydawać się znaleźć odpowiedni sposób, aby wywołać - mam:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
Później ten zostanie wywołany przez .evaluateModel
metodą klasy Evaluation
:
(.evaluateModel e-test c-model is-testing-set)
gdzie e-test
jest typu weka.classifiers.Evaluation
i według their api documentation sposób dwa parametry typów Classifier
i Instances
Co mam z Clojure jest jednak IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
- Myślę, że to dlatego, że c-model
jest rzeczywiście typu NaiveBayes
, chociaż powinno być również Classifier
- co to jest, według instance?
.
Próbowałem odlewania z cast
bezskutecznie, a z tego co rozumiem, jest to raczej twierdzenie typu (i przechodzi bez problemów, oczywiście) niż prawdziwa obsada w clojure. Czy istnieje inny sposób jawnego powiadamiania clojure, które typy do rzutowania w wywoływanych metodach java interop? (Zauważ, że oryginalny przewodnik I połączone powyżej wykorzystuje również wyraźne odlana z NaiveBayes
do Classifier
)
Pełny kod tutaj: /http://paste.lisp.org/display/129250
Zastanawiam się, co zrobić z varargs na sekundę, ale nie natknąłem się na tę odpowiedź - dziękuję! –