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

时间:2012-05-08 22:22:19

标签: scala foreach unchecked

我有以下内容:

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

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

3 个答案:

答案 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.headx.tail.headx(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")
}