Scala:将@unchecked注释放在foreach中的位置

Ala*_*son 3 foreach scala unchecked

我有以下内容:

samples.sliding(2).foreach{case List(a, b)=> printf("%x %x\n", a.value, b.value)}
Run Code Online (Sandbox Code Playgroud)

我知道单个'case'将匹配所有可能的值,但我得到'匹配并非详尽'的警告.Scala书中解释了将@unchecked注释放在正常的完全指定的匹配表达式上的位置,但不适用于上面的表单.如何注释上面的内容以阻止编译器抱怨?

Rex*_*err 10

@unchecked用于在匹配操作选择器,而不是任意的功能来定义的.所以你可以

foreach{ x => (x: @unchecked) => x match { case List(a,b) => ... } }
Run Code Online (Sandbox Code Playgroud)

但那是一口气.

或者,您可以创建一个方法,将部分函数不安全地转换为完整的函数(实际上只是强制转换为函数超类PartialFunction):

def checkless[A,B](pf: PartialFunction[A,B]): A => B = pf: A => B
Run Code Online (Sandbox Code Playgroud)

然后你就可以了

samples.sliding(2).foreach(checkless{
  case List(a,b) => printf("%x %x\n", a.value, b.value)
})
Run Code Online (Sandbox Code Playgroud)

并且你没有任何警告,因为它期待部分功能.