我理解闭包是一个函数,其返回值取决于其外部函数中定义的数据。在 javascript 中,我们可以像这样向内部函数发送参数
add(x) {
return addplus(y) {
let z = this.x + y ;
return z;
}
}
var op = add(10)(20);
scala 中的闭包是否也类似于 javascript 闭包?在 scala 中向内部函数发送参数是否太有效?
最佳答案
闭包是一个函数,它捕获定义它的外部作用域,因此可以访问在其自身作用域之外定义的实体。
闭包的一种可能用途是您所描述的,尽管利用它的技术(如评论中提到的)被称为柯里化(Currying),即使用n
建模函数code> 参数作为一个参数,返回一个采用 n
- 1 个参数的函数。
您可以在 Scala 中逐行移植 Javascript 代码:
def add(x: Int): Int => Int =
y => x + y
另外,请注意 Scala 本身支持柯里化(Currying):
def add(x: Int)(y: Int): Int =
x + y
这两者在语义上是等价的,通过部分应用它们中的任何一个,您将得到一个函数,该函数返回一个将 x
与其参数相加的函数。也可以完全应用。
val following: Int => Int = add(1)
val two = following(1)
val three = following(two)
val four = add(two)(two)
关于javascript - Scala 中的闭包如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247553/