object Closure {
/**
* scala中的閉包
* 函數在變量不處於其有效作用域內,還能夠對變量進行訪問
*
* @param args
*/
def main(args: Array[String]): Unit = {
def getHelloFunc(msg:String) = (name:String) => println(msg + "," + name)
val sayHello = getHelloFunc("hello") // 傳入msg的值 ,后面sayHello依然可以訪問到
val sayHi = getHelloFunc("hi")
// 兩次條用getHelloFunc,傳入不同的msg,創建不同的函數返回
// 然而msg只是一個局部變量,
// 在getHelloFunc調用后,還繼續存在創建的函數中,當sayHello("yxj")調用時,值為hello的msg保留在了函數內部,可以反復使用
// 這種變量超出了其作用域,還可以使用的情況,就是閉包
// scala
sayHello("yxj") // 打印 hello,yxj
sayHi("yxj") // 打印 hi,yxj
}
}