我在下面的代码中获取dup illegal arguments exception。
package tests.kiama
import org.junit.runner.RunWith
import org.scalatest.FunSuite
import org.scalatest.junit.JUnitRunner
import org.kiama.rewriting.Rewriter._
@RunWith(classOf[JUnitRunner])
class KiamaRewrite extends FunSuite {
test("test1") {
abstract class E
case class B(l: E, r: E) extends E
case class P() extends E
case class Q() extends E
case class PP() extends E
case class QQ() extends E
val t = B(P(), Q())
val d = rule {
case P() => PP()
case Q() => QQ()
}
val s = bottomup(d)(t)
println("done")
}
}例外:
java.lang.RuntimeException: dup illegal arguments: public tests.kiama.KiamaRewrite$$anonfun$1$B$2(tests.kiama.KiamaRewrite$$anonfun$1,tests.kiama.KiamaRewrite$$anonfun$1$E$1,tests.kiama.KiamaRewrite$$anonfun$1$E$1) (PP(),QQ()), expects 3我正在使用kiama图书馆。http://code.google.com/p/kiama/
发布于 2012-12-29 06:04:14
Kiama dup方法负责创建与现有实例类型相同的新实例。dup使用反射来查找构造函数,并抱怨构造函数的参数与给定的参数不匹配。在您的测试中,它试图创建一个具有两个子节点的B节点,但是B构造函数有三个参数,因为B是KiamaRewrite的一个内部类。
将B等类声明移出KiamaRewrite,测试就通过了。
https://stackoverflow.com/questions/14071238
复制相似问题