在以下代码段中:
import shapeless._
val stringList = TypeCase[List[String]]
val intList = TypeCase[List[Int]]
def patternMatch(a: Any): Unit = a match {
case stringList(strs) => println("Got Some Strings: " + strs.map(_.size).sum)
case intList(ints) => println("Got Some Ints: " + ints.sum)
case _ =>
}
val ints: List[Int] = Nil
patternMatch(List("hello", "world"))
patternMatch(List(1, 2, 3))
patternMatch(ints) // This was printing "Got Some Strings:..."
最后一个与Strings匹配怎么可能?有什么理由吗?
答案 0 :(得分:1)
TypeCase[List[String]]
,则 String
不匹配。因为Nil
- 一个空列表 - 没有这样的值,所以它匹配。
在运行时,您无法区分空列表中的空字符串列表。它们都是同一个对象 - Nil
,没有任何类型信息