Trong cố gắng sử dụng weka từ clojure, tôi đang cố gắng chuyển đổi this howto guide từ wiki weka sang clojure bằng cách sử dụng các tính năng tương tác java của clojure.Làm thế nào để cast một cách rõ ràng trong clojure khi interfacing với java
này đã làm việc tốt cho đến nay, ngoại trừ trong một trường hợp, nơi mà các cơ chế clojure phản ánh dường như không thể tìm ra phương pháp đúng để gọi - Tôi có:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
Sau này sẽ được gọi bởi các .evaluateModel
phương pháp của lớp Evaluation
:
(.evaluateModel e-test c-model is-testing-set)
nơi e-test
là loại weka.classifiers.Evaluation
và theo their api documentation phương pháp này có hai tham số có kiểu Classifier
và Instances
Những gì tôi nhận được từ clojure dù là IllegalArgumentException No matching method found: evaluateModel for class weka.classifiers.Evaluation clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
- Tôi đoán rằng điều này là do c-model
thực sự là loại NaiveBayes
, mặc dù nó cũng phải là một Classifier
- đó là, theo instance?
.
Tôi đã cố gắng truyền với cast
không có kết quả, và từ những gì tôi hiểu điều này có nhiều xác nhận kiểu hơn (và không gặp vấn đề gì). Có cách nào khác nói rõ ràng clojure mà các loại để đúc trong các cuộc gọi phương thức interop java? (Lưu ý rằng các hướng dẫn ban đầu tôi liên kết ở trên cũng sử dụng một diễn viên rõ ràng NaiveBayes
-Classifier
)
Full mã ở đây: /http://paste.lisp.org/display/129250
tôi đã tự hỏi phải làm gì với varargs trong một giây, nhưng không đi qua câu trả lời đó - cảm ơn bạn! –