我有以下内容:
samples.sliding(2).foreach{case List(a, b)=> printf("%x %x\n", a.value, b.value)}
我知道单个“案例”将匹配所有可能的值,但我收到“匹配并非详尽无遗”警告。Scala 书解释了将 @unchecked 注释放在普通完全指定的匹配表达式上的位置,但不适用于上面的形式。如何注释上述内容以阻止编译器抱怨?
@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)
})
并且您没有任何警告,因为它期待一个部分功能。
不知道@unchecked
,但为什么不直接调用x.head
and x.tail.head
or x(0)
and x(1)
呢?
如果您确定它永远不会发生,为什么不添加一个虚拟案例?
samples.sliding (2).foreach {
case List (a, b) => printf ("%x %x\n", a.value, b.value)
case _ => sys.error ("impossible")
}