scala中的闭包
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、一个闭包开始于一个函数以及定义在同一作用于的变量,然后它们彼此分开。当函数在某时刻被执行时,它仍然很神奇的知道早前引用的变量,甚至获得任何变量的修改

浙公网安备 33010602011771号