閉包的實質就是**與用到的非區域性變數的混合,即:
閉包 = ** + 用到的非區域性變數
例項1:匿名函式中引入閉包
val multiplier = (i:int) => i * factor
在 multiplier 中有兩個變數:i 和 factor。其中的乙個 i 是函式的形式引數,在 multiplier 函式被呼叫時,i 被賦予乙個新的值。然而,factor不是形式引數,而是自由變數,考慮下面**:
var factor = 3val multiplier = (i:int) => i * factor
這裡我們引入乙個自由變數 factor,這個變數定義在函式外面。
這樣定義的函式變數 multiplier 成為乙個"閉包",因為它引用到函式外面定義的變數,定義這個函式的過程是將這個自由變數捕獲而構成乙個封閉的函式。
完整例項
objecttest
var factor = 3
val multiplier = (i:int) => i *factor
}
例項2: 定義函式中引入閉包
def multiplier(factor :int) = (i:int) => i * factor
在定義的函式中使用閉包factor為引數,返還值為乙個函式
完整例項
objecttest
def multiplier(factor :int) = (i:int) => i *factor
}
Scala 閉包的使用
當前內容主要用於本人學習和複習,當前內容主要為scala中的閉包 當前內容借鑑 菜鳥教程 閉包是乙個函式,返回值依賴於宣告在函式外部的乙個或多個變數。閉包通常來講可以簡單的認為是可以訪問乙個函式裡面區域性變數的另外乙個函式。1.函式內部呼叫函式外部的變數,並返回值 閉包就是乙個匿名函式的表示式中使用...
Scala中的閉包
在scala中,函式引入傳入的引數是再正常不過的事情了,比如 x int x 0中,唯一在函式體x 0中用到的變數是x,即這個函式的唯一引數。除此之外,scala還支援引用其他地方定義的變數 x int x more,這個函式將more也作為入參,不過這個引數是 來的?從這個函式的角度來看,more...
Scala閉包詳解
閉包是乙個函式,返回值依賴於宣告在函式外部的乙個或多個變數。閉包通常來講可以簡單的認為是可以訪問乙個函式裡面區域性變數的另外乙個函式。如下面這段匿名的函式 val multiplier i int i 10函式體內有乙個變數 i,它作為函式的乙個引數。如下面的另一段 val multiplier i...