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

标签 scala foreach unchecked

我有以下几点:

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 的函数父类(super class)):
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)
})

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

关于Scala:将@unchecked 注释放在foreach 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507419/

相关文章:

Scala - MaxBins 错误 - 决策树 - 分类变量

c# - 在List对象的属性上具有条件的foreach循环

php - 为什么 foreach 循环输出两组 li 标签?

java - 为什么不简单地禁用未经检查的警告?

scala - 在 scala Spark 中分组并保存重叠列的最大值

scala - 如何使用 Scala 将派生列添加到数据框

javascript - 当 for 循环处理对象数组时 forEach 不起作用

Java未检查警告添加数组列表

java - 摆脱 List<GenericClass<T>>.toArray() 中的警告

Scala:如何组合来自不同对象的解析器组合器