Scala中的闭包是一种特殊的功能。闭包使用函数中未声明的一个或多个值来提供最终输出。这意味着它们的返回值取决于在函数外部声明的值(即,既不在参数中也不在函数体中声明)。
那么,值从何而来?
闭包使用的其他值可以在函数之外的任何地方定义,但在函数范围内。这意味着在其他函数中定义的值不能用于闭包,但可以使用在同一类中定义的任何变量或全局值。
具有以下功能:
val increment = (i:Int) => i + 2
在这里,该函数是一个匿名函数,但使用的参数不是其参数,但不是闭包,因为它不是变量。
因此,将其定义为闭包,
val increment = (i:Int) => i + adder
这是一个闭包,因为它使用了一个变量,该变量需要在函数外部进行初始化以计算返回值。我们可以在代码中函数之前的任何位置初始化此加法器变量。
例如,
var adder = 2; // 代码块 val increment = (i:Int) => i + adder
示例代码:
object Demo { var adder = 2 def main(args: Array[String]) { println( "This code will increment the value by using closure"); println("increment(10) = " + increment(10)); } val increment = (i:Int) => i + adder }
输出结果
This code will increment the value by using closure increment(10) = 12
示例说明:
在上面的代码中,我们定义了adder变量,它是closure的外部变量。然后在main方法中,我们使用参数10调用闭包函数。增量闭包采用该值,并将加法器(2)的值加到加法器上,然后返回最终值(12)。