7

ネストされたマッチングが機能しないようです。これは奇妙な制限です。

動作の例は次のとおりです。

Some(Some(1),2) match {
 | case Some(Some(a),b) => a
 | case e => e
 | }
<console>:9: error: wrong number of arguments for <none>: (x: (Some[Int], Int))Some[(Some[Int], Int)]
   case Some(Some(a),b) => a
            ^
<console>:9: error: not found: value a
   case Some(Some(a),b) => a
                           ^

これは機能します:

Some(Some(1),2) match {
case Some(a) => a match {
case (Some(a),b) => "yay"
case e => "nay"
}
}

今、私はただの愚痴ですか、それともこれを達成するためのより良い方法はありますか?

4

1 に答える 1

12

Some (Some(1),2) とは? ((Int の) オプションと Int の) タプルのオプション? これは機能します:

scala> Some ((Some (1), 2)) match {
     | case Some ((Some (a), b)) => a
     | case e => e }           
res13: Any = 1

タプルの周りに括弧が追加されていることに注意してください。括弧が少なすぎるのはよくある間違いです。

于 2011-05-28T22:12:48.653 に答える