复习:面向函数:函数做变量 / 回调 / 委托 / Lamda / 箭头函数……
JavaScript可以将箭头函数赋值给任意一个变量,Java/C#呢?
作用都是一样的:“固化”函数/方法的参数和返回。换言之,具有相同参数和返回值的方法就是同一类型的lamda。
基于上述设定,如果再引入泛型,lamda的类型其实就是由:
决定。所以,Java和C#都内置了一些lamda类型:
boolean quicken = true; IMove m = (s, t) -> { if (quicken) { //OK s *= 2; } return s * t; }; System.out.println(s); //error
那么,如果:
static IMove goSchool() { boolean quicken = true; return (s, t) -> { //以下代码会在何时执行? if (quicken) { //OK s *= 2; } return s * t; }; }
这就会形成(狭义上的)闭包,即:lambda表达式延长了quicken的生命周期。
断点演示:
分别利用Java/C#语法: