2016-09-22 18 views
3

process()IntListに追加すると、ランタイムは "Duplicate field name&signature in class file Cons$3..."となります。これは、関数内でsealed traitが定義されている場合にのみ発生します。封印された特性のメソッドは、クラスファイルに重複したフィールド名と署名を与えます

scala> def t4() = { 
    | 
    |  sealed trait IntList { 
    |  def process (baseCase: Int, f: (Int, Int) => Int): Int = 
    |   this match { 
    |   case End => baseCase 
    |   case Cons(hd, tl) => f(hd, tl.process(baseCase, f)) 
    |   } 
    | 
    |  } 
    | 
    |  final case object End extends IntList 
    | 
    |  final case class Cons (hd: Int, tl: IntList) extends IntList 
    | 
    |  val l1: IntList = Cons(1, Cons(3, Cons(5, End))) 
    | } 
t4:()Unit 

scala> t4() 
java.lang.ClassFormatError: Duplicate field name&signature in class file Cons$3 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileC 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at Cons$4$.apply(<console>:24) 
    at .t4(<console>:26) 
    ... 32 elided 
+0

は私にバグのようです。 – Samar

答えて

関連する問題