Scala 闭包 closure

基本介绍:闭包就是一个函数和与其相关的引用环境组合的一个整体(实体),参考class中当方法跟属性 组成当闭包。

//1.用等价理解方式改写 2.对象属性理解 
def minusxy(x: Int) = (y: Int) => x - y
//f 函数就是闭包.
val f = minusxy(20) 
println("f(1)=" + f(1)) // 19 
println("f(2)=" + f(2)) // 18
  1.  (y:Int)=>x – y  返回的是一个匿名函数 ,因为该函数引用到到函数外的 x,那么 该函数和 x 整体形成一个闭包 如:这里 val f = minusxy(20) 的 f 函数就是闭包
  2. 你可以这样理解,返回函数是一个对象,而 x 就是该对象的一个字段,他们共同形成一个闭包
  3.  当多次调用 f 时(可以理解多次调用闭包),发现使用的是同一个 x, 所以 x 不变。
  4. 在使用闭包时,主要搞清楚返回函数引用了函数外的哪些变量,因为他们会组合成一个整体(实 体),形成一个闭包

/*
请编写一个程序,具体要求如下
1) 编写一个函数 makeSuffix(suffix: String) 可以接收一个文件后缀名(比如.jpg),并返回一个闭
2) 调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如.jpg) ,则返回 文件名.jpg ,
如果已经有.jpg 后缀,则返回原文件名。 3) 要求使用闭包的方式完成 String.endsWith(xx)
 */

object ParameterInfer {
  def main(args: Array[String]): Unit = {
    val f = makeSuffix(".jpg")
    println(f("dog.jpg"))
    println(f("cat"))

  }

  def makeSuffix(suffix: String) = {
    (filename: String) => {
      if (filename.endsWith(suffix)) {
        filename
      }
      else {
        filename + suffix
      }
    }
  }
}
关注公众号 海量干货等你
原文地址:https://www.cnblogs.com/sowhat1412/p/12734159.html