在scala中,你可以在任何作用域内定义函数,包,类,甚至是另外一个函数或者方法。在函数体内,你可以访问到相应作用域内的任何变量,这样听上去是不是很抽象,那么废话不多说,直接上案例:
首先我们来回顾下如何定义函数,因为scala的核心就是函数。
定义函数:
val fun2: (Double) => Double = 3 * _ 定义了一个函数
定义方法:
def mulby(factor: Double) = (x: Double) => factor * x 该方法返回一个函数
我们再来加点逻辑处理,再来定义一个方法:
def processLine(line: String) = (fileName: String, width: Int) => {
//调用该方法返回的是一个函数
if (line.length > width) {
println(fileName + ":" + line)
}
}
我们来处理闭包的问题:
Source.fromString("helloworld").getLines().foreach(line => {
// processLine(line) 返回的是一个函数
processLine(line)("name", 5) 调用方法里面的函数,这就是一个闭包问题
})
输出结果如下:
name:helloworld