|NO.Z.00057|——————————|BigDataEnd|——|Hadoop&Scala.V05|——|Scala.v05|模式匹配和样例类|闭包|

一、闭包
### --- 闭包
~~~     闭包是一种函数,一种比较特殊的函数,它和普通的函数有很大区别:

~~~     # 普通的函数
val addMore1 = (x: Int) => x + 10

~~~     # 外部变量,也称为自由变量
var more = 10

~~~     # 闭包
val addMore2 = (x: Int) => x + more

~~~     # 调用addMore1函数
println(addMore1(5))
~~~     # 每次addMore2函数被调用时,都会去捕获外部的自由变量

println(addMore2(10))
more = 100
println(addMore2(10))
more = 1000
println(addMore2(10))
~~~     闭包是在其上下文中引用了自由变量的函数;
~~~     闭包引用到函数外面定义的变量,定义这个函数的过程就是将这个自由变量捕获
~~~     而构成的一个封闭的函数,也可理解为”把函数外部的一个自由变量关闭进来“。

~~~     # 何为闭包?需满足下面三个条件:
~~~     闭包是一个函数
~~~     函数必须要有返回值
~~~     返回值依赖声明在函数外部的一个或多个变量,用Java的话说,就是返回值和定义的全局变量有关

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on 2022-04-11 20:01  yanqi_vip  阅读(20)  评论(0)    收藏  举报

导航