鍍金池/ 教程/ Scala/ Scala閉包
Scala方法重載
Scala模式匹配
Scala throw關(guān)鍵字
Scala提取器
Scala概述
Scala throws關(guān)鍵字
Scala finally塊
Scala正則表達式
Scala循環(huán)語句
Scala多線程
Scala函數(shù)
Scala final關(guān)鍵字
Scala方法覆蓋
Scala字符串
Scala線程實現(xiàn)
Scala異常處理
Scala類和對象
Scala數(shù)據(jù)類型
Scala單例和伴生對象
Scala構(gòu)造函數(shù)
Scala教程
Scala Case類和對象
Scala繼承
Scala開發(fā)環(huán)境安裝配置
Scala運算符
Scala文件I/O
Scala線程方法
Scala變量
Scala try-catch語句
Scala基礎(chǔ)語法
Scala集合
Scala數(shù)組
Scala閉包
Scala訪問修辭符
Scala this關(guān)鍵字

Scala閉包

閉包是一個函數(shù),它返回值取決于在此函數(shù)之外聲明的一個或多個變量的值。

以下代碼是一個匿名函數(shù)。

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

這里,函數(shù)體i * 10中使用的唯一變量是i,它被定義為該函數(shù)的一個參數(shù)。嘗試以下代碼 -

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

乘數(shù)有兩個自由變量:ifactor。i是函數(shù)的一個正式參數(shù)。 因此,每當調(diào)用乘數(shù)時,它必然會有一個新的值。然而,factor不是一個正式的參數(shù),那這是什么呢? 再增加一行代碼。

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

現(xiàn)在factor參考了函數(shù)之外的變量,但是在閉合的范圍內(nèi)。函數(shù)引用factor,每次讀取其當前值。 如果函數(shù)沒有外部引用,那么它本身就會被簡單地關(guān)閉,不需要外部上下文。

請嘗試以下示例程序 -

例子

object Demo {
   def main(args: Array[String]) {
      println( "multiplier(1) value = " +  multiplier(1) )
      println( "multiplier(2) value = " +  multiplier(2) )
   }
   var factor = 3
   val multiplier = (i:Int) => i * factor
}

將上述程序保存在源代碼:Demo.scala中,使用以下命令編譯和執(zhí)行此程序。

D:\>scalac Demo.scala
D:\>scala Demo

multiplier(1) value = 3
multiplier(2) value = 6