scala中闭包与柯里化

闭包

在Scala中,可以在任何作用域内定义函数、包、类甚至是另一个函数或方法。在函数体内,你可以访问到相应作用域内的任何变量。函数可以在变量不再处于作用域内时被调用。

  def closePackage: Unit = {
    def mulBy(factor: Double) = (x: Double) => factor * x

    /*
    mulBy的首次调用将参数变量factor设为3,。该变量在(x:Double)=>factor * x函数
    的函数体内被引用。该函数被存入triple.然后参数变量factor从运行时的栈上被弹出。
     */
    val triple = mulBy(3)
    /*
    mulBy再次被调用,这次factor被设为0.5.该变量在(x:Double)=>factor * x函数的
    函数体内被引用,该函数被存入half.
     */
    val half = mulBy(0.5)
    //每一个函数被称为闭包,由代码和代码用到的任何非局部变量定义构成
    println(triple(14) + " " + half(14)) //42, 7
  }

柯里化

柯里化指的是将原来接受2个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数作为参数的函数。

  def curryingFunction = {
    def totalSum(x: Int, y: Int) = x + y

    println("原始:" + totalSum(4, 5))

    //变为了两个函数连续调用的形式,以下函数接受一个参数,生成另一个接受单个参数的函数
    def totalSumAtTime(x: Int) = (y: Int) => x + y

    println("柯里化:" + totalSumAtTime(4)(5))
  }
发布了101 篇原创文章 · 获赞 265 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/a805814077/article/details/103110971