Scala - сопоставление шаблонов с условными операторами?

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

def foo(x: Int) = if (x > 1) true
                  else if (x < 1) false
                  else throw new IllegalArgumentException("Got " + x)

Ответ 3

Так как в вашем примере отсутствует случай 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