因子需要的Scala模式匹配

时间:2015-08-30 10:00:57

标签: scala pattern-matching

目前学习Scala,特别是学习模式匹配,我在Scala中编写了这个简单的因子方法:

 def factorial(n : Int) : Int = {
   if(n <= 1)
     1
   else
    n * factorial(n -1)
}

然后我想,我可以使用模式匹配并写下这个:

def fact(n : Int) : Int = n match {
  case 0 => 1
  case n => n * fact(n -1)
}

但是我认为模式匹配的重点是对数据进行排序,为什么我需要在像factorial这样的东西上使用它呢?

非常感谢。

2 个答案:

答案 0 :(得分:1)

  

但我认为模式匹配的重点是对数据进行排序

实际上,模式匹配非常适合编写任何类型的算法(就像您的示例中那样)。实际上,Odersky的Functional Programming in Scala在线课程的大部分内容都集中在使用模式匹配编写算法上。

答案 1 :(得分:0)

数据解构和提取与数据类型相结合,在模式匹配中至关重要。

在阶乘的情况下,我们以不同的方式提取和处理大于1的值到值1,也许是模式匹配的微不足道的使用,很可能用和if-else表达式替换。