Вложенные совпадения Scala, почему некоторые (некоторые (1), 1) не могут совпадать? - PullRequest
6 голосов
/ 29 мая 2011

Кажется, что вложенное сопоставление не работает, что является странным ограничением.

Ниже приведен пример поведения:

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"
}
}

Теперь, я просто подонок или есть лучший способ добиться этого?

1 Ответ

12 голосов
/ 29 мая 2011

Что такое Some (Some (1), 2)?Опция Tuple (вариант (Int) и Int)?Это работает:

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

Обратите внимание на дополнительные скобки вокруг кортежа - это распространенная ошибка, когда их слишком мало.

...