Scala閉包詳解

2021-09-26 00:05:06 字數 892 閱讀 5942

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

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

如下面這段匿名的函式:

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   

var factor = 3

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

}

執行例項 »

執行以上**,輸出結果為:

$ scalac test.scala  

$ scala test

muliplier(1) value = 3

muliplier(2) value = 6

閉包函式 scala

閉包函式 返回結果 依賴外部引數 正常函式 val mult x int 閉包函式 var factor 5 依賴引數 閉包函式mult1 val mult1 x int x factor println 閉包函式 mult1 在factor factor 時,結果為 mult1 10 factor...

Scala中的閉包

在scala中,函式引入傳入的引數是再正常不過的事情了,比如 x int x 0中,唯一在函式體x 0中用到的變數是x,即這個函式的唯一引數。除此之外,scala還支援引用其他地方定義的變數 x int x more,這個函式將more也作為入參,不過這個引數是 來的?從這個函式的角度來看,more...

Scala 閉包的使用

當前內容主要用於本人學習和複習,當前內容主要為scala中的閉包 當前內容借鑑 菜鳥教程 閉包是乙個函式,返回值依賴於宣告在函式外部的乙個或多個變數。閉包通常來講可以簡單的認為是可以訪問乙個函式裡面區域性變數的另外乙個函式。1.函式內部呼叫函式外部的變數,並返回值 閉包就是乙個匿名函式的表示式中使用...