For
for循環之前已經提到過,這裏做進階介紹:
for (i <- 1 to 2;j <- 1 to 2 if i != j)
println(100*i + j + " ")
可以加入條件表達式,當然,條件表達式可以非常複雜。
Function
- 函數是有值的,如果吳返回值則函數值爲Unit。因爲函數是有值的,所以函數可以作爲函數的參數進行傳遞。
- 匿名函數,是真正的函數的一種常態。
下面的代碼中:
第一行是定義了一個名稱爲addA的函數,其具有一個名爲x的整形參數,此函數的作用是對參數進行+100的操作。
第二行是定義了一個匿名函數,沒有名稱,直接出現了參數列表(x : 100),然後跟上=>,後面的x + 200操作是這個匿名函數的具體操作。直接將匿名函數的值定義給add常量,直接用add調用該匿名函數即可。
def addA(x : Int) = x + 100
val add = (x : Int) => x + 200
addA(10)
add(10)
下面是Spark的WordCount程序,其中大量用到了匿名函數:
line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println)
Lazy
無論是變量還是常量,在定義時加上lazy作爲修飾,表示延遲執行,懶執行。即當第一次真正使用該變量或常量時,才真正執行賦值。