我有以下内容:
samples.sliding(2).foreach{case List(a, b)=> printf("%x %x\n", a.value, b.value)}
我知道单个'case'将匹配所有可能的值,但我得到'匹配并非详尽'的警告。 Scala书中解释了将@unchecked注释放在正常的完全指定的匹配表达式上的位置,但不适用于上面的表单。如何注释上面的内容以阻止编译器抱怨?
答案 0 :(得分:10)
@unchecked
仅在匹配操作中为选择器定义 ,而不是为任意函数定义。所以你可以
foreach{ x => (x: @unchecked) => x match { case List(a,b) => ... } }
但这是相当满口的。
或者,您可以创建一个方法,将部分函数不安全地转换为完整的函数(实际上只转换为PartialFunction
的函数超类):
def checkless[A,B](pf: PartialFunction[A,B]): A => B = pf: A => B
然后你可以
samples.sliding(2).foreach(checkless{
case List(a,b) => printf("%x %x\n", a.value, b.value)
})
并且您没有任何警告,因为它期待部分功能。
答案 1 :(得分:0)
不知道@unchecked
,但为什么不只是致电x.head
和x.tail.head
或x(0)
和x(1)
?
答案 2 :(得分:-2)
如果您确定它永远不会发生,为什么不添加假案例?
samples.sliding (2).foreach {
case List (a, b) => printf ("%x %x\n", a.value, b.value)
case _ => sys.error ("impossible")
}