Shapeless TypeCase Wierd Behavior

时间:2018-01-24 17:54:43

标签: scala shapeless

在以下代码段中:

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匹配怎么可能?有什么理由吗?

1 个答案:

答案 0 :(得分:1)

如果至少有一个值不是TypeCase[List[String]],则

String不匹配。因为Nil - 一个空列表 - 没有这样的值,所以它匹配。

在运行时,您无法区分空列表中的空字符串列表。它们都是同一个对象 - Nil,没有任何类型信息