斯卡拉:这是关闭吗?

时间:2015-03-21 19:02:05

标签: scala closures

我想知道我的代码是代表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)

或许我错了?

2 个答案:

答案 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,一个所谓的"环境"关闭条款。