Scala - сопоставление шаблонов с условными выражениями? - PullRequest
16 голосов
/ 19 июля 2011

Можно ли сделать что-то вроде:

def foo(x: Int): Boolean = {
    case x > 1 => true
    case x < 1 => false
}

Ответы [ 3 ]

26 голосов
/ 19 июля 2011
def foo(x: Int): Boolean = 
    x match {
        case _ if x > 1 => true
        case _ if x < 1 => false
    }

Обратите внимание, что у вас нет случая для x == 1, хотя ...

2 голосов
/ 19 июля 2011

Я бы написал что-то вроде этого:

def foo(x: Int) = if (x > 1) true
                  else if (x < 1) false
                  else throw new IllegalArgumentException("Got " + x)
0 голосов
/ 19 июля 2011

Поскольку в вашем примере отсутствует регистр x == 1, я предполагаю, что он обрабатывается так же, как x < 1.

. Вы можете сделать это так:

def foo(x:Int):Boolean = (x - 1).signum match {
  case 1 => true
  case _ => false
}

Но тогда, конечно, это можно упростить:

def foo(x:Int) = (x - 1).signum == 1
...