Scala-复杂条件模式匹配

Scala-复杂条件模式匹配,scala,pattern-matching,Scala,Pattern Matching,我想表达一个语句,在C中,伪代码如下所示: switch(foo): case(1) if(x > y) { if (z == true) doSomething() } else { doSomethingElse() } return doSomethingElseEntirely()

我想表达一个语句,在C中,伪代码如下所示:

switch(foo):
    case(1)
        if(x > y) {
            if (z == true)
                doSomething()
            }
            else {
                doSomethingElse()
            }
        return doSomethingElseEntirely()

    case(2)
        essentially more of the same

scala模式匹配语法是一种很好的方法吗?

如果您想在一条
match
语句中处理多个条件,还可以使用允许您为案例指定附加条件的保护:

foo match {    
  case 1 if x > y && z => doSomething()
  case 1 if x > y => doSomethingElse()
  case 1 => doSomethingElseEntirely()
  case 2 => ... 
}

这实际上与OP写的不符。控制流程不同;在
x>y&&z
上,OP执行
doSomething()
返回dosomethingelseentirele()
,而您的OP单独返回
doSomething()
。@Rex-很好,谢谢。我不太明白,因为OP的代码缺少一些开头和结尾的花括号。无论如何,它应该很容易修复相应的机构。对我来说,这并不表明x>y测试是共同的前两个分支。if/then/else没有本质上的错误,在这种情况下,它更清晰(IMO)。@Paul我同意,但这是要求这种解决方案的OP!:)我无法在异常处理中使用防护