scala閉包
代碼示例:
package test.close_pack import scala.collection.mutable.ArrayBuffer /** * AUTHOR Guozy * DATE 2019/6/1-14:44 **/ object F_clo { var votingName = "jack" val isOfVotingAge = (name: String) => { println(s"hello ${name},you name is ${votingName} when after change!!!") } var fruits = ArrayBuffer[String]() def addToBusk = (s: String) => { fruits += s println(fruits.mkString(",")) } }
package test.close_pack import scala.collection.mutable.{ArrayBuffer, ListBuffer} /** * AUTHOR Guozy * DATE 2019/6/1-14:43 **/ object Mains { def main(args: Array[String]): Unit = { F_clo.isOfVotingAge("Dany") F_clo.isOfVotingAge("mack") printResult(F_clo.isOfVotingAge, "kindy") F_clo.votingName = "Computer" printResult(F_clo.isOfVotingAge, "nick") println("-----------------------------------------") F_clo.addToBusk("apple") F_clo.addToBusk("bananal") buyStaf(F_clo.addToBusk, "water") F_clo.fruits = ArrayBuffer[String]() buyStaf(F_clo.addToBusk,"blue") buyStaf(F_clo.addToBusk,"yellow") } def printResult(f: String => Unit, x: String): Unit = { f(x) } def buyStaf(f: String => Unit, x: String) = { f(x) } }
運行結果:
定義:
1、所謂的閉包,即一個函數與一個與該函數引用的非局部變量引用環境,閉包允許函數直接訪問直接語法作用於之外的變量。
2、閉包是滿足下面三個條件的一段代碼塊:
a.代碼塊可以當做值來傳遞
b.同時可以被任何擁有改制的對象按需執行
c.可以引用上下穩重已經創建的變量
3、一個閉包開始於一個函數以及定義在同一作用於的變量,然后它們彼此分開。當函數在某時刻被執行時,它仍然很神奇的知道早前引用的變量,甚至獲得任何變量的修改