好程序員大數據教程分享Scala系列之閉包,閉包是一個函數,返回值依賴於聲明在函數外部的一個或多個變量。程序員
函數體內能夠方法相應做用域內的任何變量。閉包
閉包一般來說能夠簡單的認爲是能夠訪問一個函數裏面局部變量的另一個函數。函數
普通函數:大數據
val multiplier = (i:Int) => i * 10 spa
函數體內有一個變量 i,它做爲函數的一個參數。教程
val multiplier = (i:Int) => i * factorip
在 multiplier 中有兩個變量:i 和 factor。其中的一個 i 是函數的形式參數,在 multiplier 函數被調用時,i 被賦予一個新的值。然而,factor不是形式參數,而是自由變量,考慮下面代碼:作用域
var factor = 3
val multiplier = (i:Int) => i * factor 變量
這裏咱們引入一個自由變量 factor,這個變量定義在函數外面。object
這樣定義的函數變量 multiplier 成爲一個"閉包",由於它引用到函數外面定義的變量,定義這個函數的過程是將這個自由變量捕獲而構成一個封閉的函數。
object Test {
def main(args: Array[String]) {
println( "muliplier(1) value = " + multiplier(1) )
println( "muliplier(2) value = " + multiplier(2) )
}
var factor = 3
val multiplier = (i:Int) => i * factor }