【发布时间】:2012-05-01 18:52:43
【问题描述】:
在尝试使用 clojure 中的 weka 时,我正在尝试使用 clojure 的 java 互操作功能将 this howto guide 从 weka wiki 转换为 clojure。
到目前为止,这一切都很好,除了在一种情况下,clojure 反射机制似乎无法找到正确的方法来调用 - 我有:
(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
稍后这将被Evaluation 类的.evaluateModel 方法调用:
(.evaluateModel e-test c-model is-testing-set)
其中e-test 的类型为weka.classifiers.Evaluation,根据their api documentation,该方法采用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
【问题讨论】:
标签: java clojure interop variadic-functions