我正在阅读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
的一部分?
我明白,如果条件不是一个参数。
答案 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)
调用最大值(递归),在x
和y
之间获得一个前导的列表(取决于if评估的内容)到ys
。