Как мне сопоставить несколько аргументов? - PullRequest
32 голосов
/ 22 марта 2011

У меня есть функция:

def func(a: int, b: int, c: double): int

И я хочу сопоставить различные возможные сценарии

  1. Где бы c не было 0, вернуть b-a
  2. Где бы c> 9, вернуть 0
  3. Где-нибудь a=b вернуть 0

И так далее, перед выполнением более сложной логики, если ничего из вышеперечисленного не выполняется.

Должен ли я сначала сопоставить c отдельно или я могу сопоставить a, b, c, как _,_,0?

Ответы [ 2 ]

63 голосов
/ 22 марта 2011

Вы можете сопоставить шаблон со всеми описанными случаями, как это:

def func(a: Int, b: Int, c: Double) = (a, b, c) match {
    case (a, b, 0) => b - a
    case (a, b, c) if c > 9 || a == b => 0
    case _ => 1 // add your logic here
}
3 голосов
/ 22 марта 2011

Исходя из моих комментариев к ответу Easy Angel, я все еще чувствую, что

if (c == 0)
   b -a
else if (c > 9)
   0
else if (a == b)
   0
else 
   1 // your logic here

яснее.В основном потому, что на самом деле здесь нет ни одного паттерна для сопоставления.

...