Kotlin笔记 第六章 (三)Lambda表达式.md

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Leslie_LN/article/details/82805092

Lambda表达式#

1、定义

  1. Labmbda表达式总是被大括号括这
  2. 定义lambda表达式不需要fun关键字,无须指定函数名
  3. 形参列表位于“->”之前声明,参数类型可以省略
  4. 函数体位于“->”之后
  5. 函数体的最后一个表达式自动作为Lambda表达式返回值,无须使用return关键字

如:

{a:Int,b:Int-> a*b}


{it* it}
  • 当只有一个形参时,可以同时省略形参类型、形参名,那么此时"->"不需要了,lambda表达式可以通过it来代表形参;
  • 第三条省略形参列表参数类型的前提是:可以通过上下文(lambda表达式赋值的变量类型)推断出形参类型:
    如:

var result:(Int)-> Int={n->n*n}

但是下面这种就不行,会报错:

var result={n->n*n}

1.1 调用Lambda表达式

可以像函数一样,将lambda表达式赋值给变量

		var a:(Int)->Int={it *it}

		a(3)

或者lambda表达式作为函数(函数类型形参的函数)调用的实参

list.dropWhile(e->e.lenth>4)

这里由于dropWhile()函数的函数形参(形参类型为(T->boolean))便可以推断出这里e变量的数据类型,因此可以这里可以省略形参类型;

也可以直接在lambda表达式后面调用:

	{a:Int->a*a}(3)

2、函数的最后的一个形参是函数类型

函数最后一个形参时函数类型,如果你打算传入一个Lambda表达式实参,允许将lambda表达式写在圆括号之外;

如:

fun foo(a:Int ,b:(Int)->Int):Unit{


	........
}

调用时:

foo(4){
e->e*e	

}

如果函数就只有一个函数类型形参,如果你打算传入一个lambda表达式实参,除了可以将lambda表达式写在圆括号外面,这是可以将圆括号省略

	fun foo(a:(Int)->Int){

		....
	
	}

调用:

	foo{

		e ->e*e

		}

猜你喜欢

转载自blog.csdn.net/Leslie_LN/article/details/82805092