count
Scala 2.9.2 には、次のような再帰関数があります。
def count(traces: Seq[(Char, Char)], acc: (TP, TN, FP, FN)): (TP, TN, FP, FN) = {
val (tp, tn, fp, fn) = acc
traces match {
case Nil => acc
case ('(', '(')::rest => count(rest, (tp + 1, tn, fp, fn))
case (')', ')')::rest => count(rest, (tp + 1, tn, fp, fn))
case ('(', ')')::rest => count(rest, (tp, tn + 1, fp, fn))
// ... exhaustive set of cases ...
}
}
入力時Seq(('(', '('))
に、関数は次をスローしますMatchError
。
scala.MatchError: Vector(((,()) (of class scala.collection.immutable.Vector)
これについては、Scala コンソールでコードをいじって調べました。
scala> val t = Seq(('a', 'b'), ('b', 'c'))
t: Seq[(Char, Char)] = List((a,b), (b,c))
scala> t match { case Nil => "h"; case ('a', 'b')::rest => rest }
res6: java.lang.Object = List((b,c))
scala> t1 match { case Nil => "h"; case ('a', 'b')::rest => rest }
scala.MatchError: List((b,c)) (of class scala.collection.immutable.$colon$colon)
マッチング('a', 'b')::rest
(2 行目) が正しい型のオブジェクトを返していないように見えます。これは、Scala がマッチング方法を知らないSeq[(Char, Char)]
突然の型になったためです。java.lang.Object
この動作を説明するものは何ですか?