2

私は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

キアーマ図書館を利用しています。http://code.google.com/p/kiama/

4

1 に答える 1

2

Kiamadupメソッドは、既存のインスタンスと同じタイプの新しいインスタンスを作成する役割を果たします。dupリフレクションを使用してコンストラクターを検索し、コンストラクターの引数が指定された引数と一致しないことを訴えています。Bテストでは、2つの子を持つノードを作成しようとしていますが、の内部クラスであるBため、コンストラクターには3つの引数があります。BKiamaRewrite

Betcクラス宣言を外に移動するKiamaRewriteと、テストに合格します。

于 2012-12-28T22:04:14.030 に答える