使用Lambda定义一个sum函数
var sumFun = { arg1: Int, arg2: Int -> arg1 + arg2 }
var sumFun2 = { arg1: Int, arg2: Int ->
println("可以写多行,最后一行是函数的返回")
arg1 + arg2
}
作为参数传递的例子
fun main(args: Array<String>) {
//迭代args
for (i in args) {
println(i)
}
//和上面的结果是等价,println(it)作为参数传递给forEach
args.forEach { println(it) }
}
如何简写的?我们来看下过程
args.forEach({ it -> println(it) }) //1入参是一个Lambda表达式
args.forEach({ println(it) }) //2入参只有一个的话,可以省略。为it
args.forEach(){ println(it) } //3如果参数最后一个是Lambda表达式,大括号可以移到小括号外面
args.forEach{ println(it) } //4小括号里没有参数,可以省略掉
args.forEach(::println) //5终级版本Convert lambda to reference,println与所需要的lambda表达式类型一样,可直接引用该函数 .用::引用函数
如何在迭代过程中跳出迭代
//给大括号取号取名ForEach@,用@ForEach跳出迭代
args.forEach ForEach@{
if(it=="q") return@ForEach
println(it)
}
函数是是匿名函数
写法:{[参数列表]->[函数体,最后一行是返回值]}
比如: (Int,Int)->Int
通过打印看到类型
println(someFun)
结果为:(kotlin.Int, kotlin.Int) -> kotlin.Int