大数据系列修炼-Scala课程22

核心内容:
1、Scala中的闭包实战详解

1、scala中的闭包实战详解

1>Scala中的闭包类似于JavaScript中的方法–对其内部的方法进行动态调用。
2>Scala中的闭包捕获到的是变量的本身而不仅仅是变量的数值,当自由变量发生变化时,Scala中的闭包能够捕获到这个变化.
3>如果自由变量在闭包内部发生变化,也会反映到函数外面定义的自由变量的数值。

实例程序1:(对应1知识点)

object App 
{
   def main(args:Array[String]):Unit=   //main函数的形式参数是一个字符串数组
   {
      def fun(more:Int) = (x:Int) => more + x
      val aa = fun(10)  //本质上构造了一个function函数
      println(aa)  
      println(aa.apply(10))  //对其内部apply方法的调用
      println(aa(10))
   }   
}

运行结果:

<function1>
20
20

scala中的闭包可以形象的理解为:

     def fun(more:Int)=
     {
       def apply(x:Int)=
       {
          return more + x
       }
     }

实例程序2:(对应2知识点)

object App 
{
   def main(args:Array[String]):Unit=   //main函数的形式参数是一个字符串数组
   {
      var more = 10  //自由变量
      def fun(x:Int) = x + more
      println(fun(10))  //20
      more = 20  
      println(fun(10))  //30
   }   
}

实例程序3:(对应3知识点)

object App 
{
   def main(args:Array[String]):Unit=   //main函数的形式参数是一个字符串数组
   {
      var sum = 0
      val array = Array(10,20,30)
      array.foreach { x => sum += x }
      println(sum)  //60
   }   
}

你可能感兴趣的:(scala,闭包)