|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
浙公网安备 33010602011771号