2016-08-03 2 views
0

Например:Как я могу захватить несколько переменных, используя сопоставление шаблонов?

List(1,2,3,4) match { 
    case List(x: Int, y: Int, *rest) => 
    println(rest) // i want to get List(3,4) 
} 

_* может матч несколько переменных, но сделать, чтобы казаться, чтобы иметь возможность захвата их.

Спасибо!

+1

'Список (1.2.3.4) матч {случай ele1 :: ele2 :: Остальное = > {}} ' –

ответ

4

Вы можете использовать rest @ _* для этого:

List(1,2,3,4) match { 
    case List(x: Int, y: Int, rest @ _*) => 
    println(rest) 
} 

Обратите внимание, что это вообще: вы можете использовать x @ pattern, чтобы дать имя x на любое значение, соответствующее pattern (при условии, что это значение имеет подходящий тип). См. http://scala-lang.org/files/archive/spec/2.11/08-pattern-matching.html#pattern-binders.

2
List(1, 2, 3, 4) match { 
    case _ :: _ :: tail => println(tail) // prints List(3, 4) 
} 
2

Вы можете просто соответствовать списки по конс оператора:

List(1, 2, 3, 4) match { 
    case x :: y :: rest => println(rest) 
} // gives you "List(3, 4)" to stdout 
+0

, это также прекрасный способ сделать это. благодаря! –

1

Другой способ вызова по шаблону в списках,

val List(x,y,rest @ _*) = List(1,2,3,4) 

, который извлекает

x: Int = 1 
y: Int = 2 
rest: Seq[Int] = List(3, 4) 
Смежные вопросы