我想知道我的代码是代表closure concept
吗?
object Closure {
val fun = (x: Int) => x + 1
def clj = (y: Int) => y * fun(y)
}
这是我的转轮代码。
object App {
def main(args: Array[String]) {
val c = Closure
val result = c.clj(10)
println(result)
}
}
假设,闭包代码是
def clj = (y: Int) => y * fun(y)
或许我错了?
答案 0 :(得分:3)
它不是,因为它不会关闭任何东西。
这将是一个闭包:
object Foo {
def clj(a: Int) = { (b: Int) => a + b }
}
这是:
object
名为Foo
... clj()
... 返回的内部函数在a
被调用时捕获(或关闭)clj()
的值,从概念上保持活着。
因此:
val f1 = Foo.clj(10) // returns a function that adds 10 to whatever is passed
f1(100) // => 110
关于闭包的维基百科条目实际上包含对该概念的体面描述。
https://en.wikipedia.org/wiki/Closure_(computer_programming)
答案 1 :(得分:1)
当我看到闭包概念时,是的,clj
中的代码表示一个闭包,因为它引用了一个外部函数fun
,一个所谓的"环境"关闭条款。