zoukankan      html  css  js  c++  java
  • 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
          }
        }
      }
    }
    关注公众号 海量干货等你
  • 相关阅读:
    OCP-052考试题库汇总(29)-CUUG内部解答版
    OCP-052考试题库汇总(28)-CUUG内部解答版
    OCP-052考试题库汇总(27)-CUUG内部解答版
    OCP-052考试题库汇总(26)-CUUG内部解答版
    OCP-052考试题库汇总(25)-CUUG内部解答版
    OCP-052考试题库汇总(24)-CUUG内部解答版
    007 线程的join方法
    006 线程休眠
    005 线程打断---完成线程的终结
    004 守护线程
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734159.html
Copyright © 2011-2022 走看看