2012-09-18 38 views
2

我在閱讀this博客文章,我無法理解代碼的一部分。語法解釋模式匹配scala中的列表

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的一部分嗎?
我明白,如果條件不完全是一個參數。

回答

12

在斯卡拉,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的列表。