小编Yef*_*itz的帖子

在与java连接时如何在clojure中显式转换

在试图使用来自clojure的weka时,我试图使用clojure的java互操作特性将这个howto指南从weka wiki 转换为clojure.

到目前为止,这种方法运作良好,除了在一种情况下,clojure反射机制似乎无法找到正确的调用方法 - 我有:

(def c-model (doto (NaiveBayes.) (.buildClassifier is-training-set)))
Run Code Online (Sandbox Code Playgroud)

稍后这将由类的.evaluateModel方法调用Evaluation:

(.evaluateModel e-test c-model is-testing-set)
Run Code Online (Sandbox Code Playgroud)

where 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在java互操作方法调用中要转换哪些类型?(请注意,我上面链接的原始指南也使用了来自的显式强制NaiveBayes转换Classifier)

完整代码在这里:/ http://paste.lisp.org/display/129250

java interop clojure variadic-functions

6
推荐指数
1
解决办法
849
查看次数

标签 统计

clojure ×1

interop ×1

java ×1

variadic-functions ×1