Scala中的闭包

Scala中的闭包

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)。