Да, используется ключевое слово if
. Из раздела Case Classes A Tour of Scala, возле дна:
def isIdentityFun(term: Term): Boolean = term match {
case Fun(x, Var(y)) if x == y => true
case _ => false
}
(Это не упомянуто на странице Pattern Matching , возможно, из-за краткого обзора тура.)
В Haskell otherwise
на самом деле является просто переменной, связанной с True
. Так что это не добавляет никакой силы концепции сопоставления с образцом. Вы можете получить его, просто повторив свой первоначальный шаблон без охраны:
// if this is your guarded match
case Fun(x, Var(y)) if x == y => true
// and this is your 'otherwise' match
case Fun(x, Var(y)) if true => false
// you could just write this:
case Fun(x, Var(y)) => false