大資料學習:閉包

andy888168發表於2019-10-11

大資料學習:閉包

閉包是一個函式,返回值依賴於宣告在函式外部的一個或多個變數。

函式體內可以方法相應作用域內的任何變數。

閉包通常來講可以簡單的認為是可以訪問一個函式里面區域性變數的另外一個函式。

普通函式:

val  multiplier = (i:Int) => i * 10   

函式體內有一個變數 i,它作為函式的一個引數。

val  multiplier = (i:Int) => i * factor

  multiplier 中有兩個變數:i 和 factor。其中的一個 i 是函式的形式引數,在 multiplier 函式被呼叫時,i 被賦予一個新的值。然而,factor不是形式引數,而是自由變數,考慮下面程式碼:

var  factor = 3   
val  multiplier = (i:Int) => i * factor  

這裡我們引入一個自由變數 factor,這個變數定義在函式外面。

這樣定義的函式變數 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  
}  

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947096/viewspace-2659535/,如需轉載,請註明出處,否則將追究法律責任。

相關文章