(2) 自动推断返回类型
Lambda 函数也并不总是必须返回void 。如果Lambda 的复合声明语句像是这样的 { return expression ; } ,那么Lambda 的返回类型就会自动地被推断成expression的类型。
输出结果:
图5
在上述代码中,n*n*n是int类型,所以Lambda函数返回也是int类型。另外,如果是复杂复合语句的声明(如下图红色框标注部分),Lambda函数就不能自动推断出返回类型,需要您显式指定返回类型。下面代码示例出现复杂复合声明,用户指定Lambda函数返回类型。
输出结果:
上述代码中,有n*n*n是int类型,而n/2.0又是double类型,这样Lambda函数无法推断返回类型,所以需要开发人员指定返回类型。如果您忘记指定的话,会出现错误。如果去掉transform语句中的double,就会出现编译错误。
另外,Lambda表达式分有状态和无状态两种。在前面的Lambda表达式中,[] 操作符是 Lambda导引符,标识表达式的开始,注意到[]中没有任何数据,这就是一个无状态的Lambda表达式,不包含数据成员。在Lambda导引符[]中指定capture-list的表达式,就是有状态的表达式,在[]中指定了x和y。