4

私は次のものを持っています:

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

単一の「ケース」がすべての可能な値に一致することはわかっていますが、「一致は完全ではありません」という警告が表示されます。Scalaの本では、@ uncheckedアノテーションを通常の完全に指定された一致式のどこに配置するかについて説明していますが、上記のフォームでは説明していません。コンパイラが文句を言うのを防ぐために、上記に注釈を付けるにはどうすればよいですか?

4

3 に答える 3

12

@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)
})

部分的な機能を期待していたため、警告は表示されません。

于 2012-05-08T22:50:11.070 に答える
0

についてはわかりませんが、 andまたはandを @unchecked呼び出すだけではどうでしょうか。 x.headx.tail.headx(0)x(1)

于 2012-05-08T23:13:23.990 に答える
-2

絶対に起こらないと確信しているなら、ダミーのケースを追加してみませんか?

samples.sliding (2).foreach {
  case List (a, b) => printf ("%x %x\n", a.value, b.value)
  case _           => sys.error ("impossible")
}
于 2012-05-08T22:29:48.993 に答える