scala 学习笔记--闭了个包

object Test01 {
  def main(args: Array[String]): Unit = {
    //普通函数 
    val squ=(x:Int) => x*x 
//    ps:_的简写形式只在1.参数类型已知的情况下才能用--自动推断  2.=> 右边只出现一次的情况
    
    
    //闭包--一旦函数引用了还是外部的变量或常量,那么该函数为闭包函数
    var v=5
    val fun1=mulby(v)
    println(s"v=$v "+fun1(2d))
    v=10
    println(s"v=$v "+fun1(2d))
    val fun2=mulby(v)
    println(s"v=$v "+fun2(2d))
    /*
     * 结果输出:
     * v=5 20.0   当v=5时,外部的变量已被copy到fun1函数内部,称为闭包
         * v=10 20.0    当v=10时,已经不会影响fun1了
         * v=10 30.0    v=10时,创建函数fun2,v的值被copy到fun2内部(闭包)
         * 
     */
  }
  //方法
   def squMethod(x:Int) : Int = x*x
   //高阶函数--一个接受函数参数的函数
   def mulby(fina:Double) = (x:Double) => fina*x+10
   //fina是这个函数的参数,x是另一个函数的参数
   
   //why?--应为可以这样用
   val f1=mulby(10d)
}

一旦函数引用了还是外部的变量或常量,那么就称此函数为闭包函数。

原文地址:https://www.cnblogs.com/yanghaolie/p/6905081.html