2014-07-01 44 views

回答

11

“匹配可能并不详尽的“警告仅在类型为sealed类的模式匹配时才给出,并且您只有子类或对象的子集的情况。 List是一个密封类的子类::和子对象Nil,是这样的:

sealed abstract class List[+T] 
class ::[+T] extends List[+T] 
object Nil extends List[Nothing] 

如果你有match,并没有一个案例::,一个用于Nil,并且也没有可能匹配任何List的情况下,斯卡拉知道这场比赛并非详尽无遗,并将报告。 A case _将匹配任何内容并将阻止该警告。但是List(a, b)也会阻止警告,因为Scala不知道它是否只匹配某些子类。

当您使用List作为提取器时,如List(a, b),您使用提取器List.unapplySeq拆分匹配的值。 Scala并不试图对提取器的行为做出假设,因此也不知道匹配不完全。在不知道List.unapplySeq的实现细节的情况下,无法知道它不会愉快地匹配所有内容并返回所需的两个值。

相关问题