我对java的scala还是很陌生,对模式匹配也很陌生。我想引起注意的一件事是何时使用它以及它的成本/收益是多少。例如这个
def myThing(a: Int): Int = a match {
case a: Int if a > 0 => a
case _ => myThing(a + 1)
}
做同样的事情(除非我真的误解了)
def myThing(a: Int): Int = {
if (a > 0) a
else myThing(a + 1)
}
所以我的实际问题是:
但是它们是否以相同的方式运行?我的模式匹配示例尾递归吗?如果不是,那么为什么不在第二个示例中呢?
还有其他我应该担心的事情,例如资源吗?还是我应该总是尝试使用模式匹配?
我一直在寻找这些答案,但是还没有找到任何“最佳实践”!
编辑:我知道所使用的示例有点人为-我刚刚添加了它,以明确它下面的问题-谢谢!
最佳答案
是的,它们确实运行相同。每个语法糖的最佳实践都是相同的:只要它提供了更具可读性或灵活性的代码,就应使用它。在示例中,如果使用if
语句,则可以省略花括号并只写
def myThing(a: Int): Int = if (a > 0) a else myThing(a + 1)
绝对比模式匹配更方便。模式匹配在以下情况下非常方便:
另外to ensure you function is tail-recursive您可以使用
@tailrec
批注