模式匹配scala中列表的语法说明

时间:2012-09-18 12:18:18

标签: scala pattern-matching

我正在阅读this博文,我无法理解部分代码。

object O {
  def maximum(x: List[Int]): Int = x match {
  case Nil => error("maximum undefined for empty list")
  case x :: y :: ys => maximum((if(x > y) x else y) :: ys)
  case x :: _ => x
 }
}

请解释代码maximum((if(x > y) x else y) :: ys)

if条件如何成为方法maximum的一部分? 我明白,如果条件不是一个参数。

1 个答案:

答案 0 :(得分:12)

在Scala中,if是表达式,而不是语句。

在REPL中尝试:

scala> val x=1; val y=0
x: Int = 1
y: Int = 0

scala> val test=if(x > y) x else y
test: Int = 1

if评估为1,并指定1进行测试。在Java中if可以用条件运算符(x > y) ? x : y

表示

现在,您有一个名为maximum的函数,它将List[Int]作为参数。 maximum((if(x > y) x else y) :: ys)调用最大值(递归),在xy之间获得一个前导的列表(取决于if评估的内容)到ys