闭包的理解,开发java的同学需要转个弯理解,以下例子很好的解释了一个简单闭包的使用。
在java中可以理解为一个内部的函数,在scala中直接简化为一个内部函数了。
这个内部函数可以直接作为结果返回给调用者;其实和工厂方法有点类似,根据入参数的值,返回不通的对象,这儿是返回不同的方法:
package com.atguigu.wc object ClosePackage { def main(args: Array[String]): Unit = { def getHelloFunc(msg:String) = (name:String) => println(msg + "," + name) //定义一个函数getHelloFunc入参为msg,函数实现为一个没有名字的内部函数,函数的入参为name val sayHello = getHelloFunc("hello") // 传入msg的值 ,后面sayHello依然可以访问到 val sayHi = getHelloFunc("hi") //得到的sayHello、sayHi为一个内部函数。且函数里面的msg已经被设置为不同的只。 // 两次条用getHelloFunc,传入不同的msg,创建不同的函数返回 // 然而msg只是一个局部变量, // 在getHelloFunc调用后,还继续存在创建的函数中,当sayHello("yxj")调用时,值为hello的msg保留在了函数内部,可以反复使用 // 这种变量超出了其作用域,还可以使用的情况,就是闭包 // scala sayHello("yxj") // 打印 hello,yxj sayHi("yxj") // 打印 hi,yxj } }
原始函数代码引用自链接:
https://www.cnblogs.com/yxj0728/p/9281773.html