funnum1Andnum2(num1:Int,num2:Int,operation: (Int,Int)->Int):Int{ val result=operation(num1,num2) return result } funplus(num1:Int,num2:Int):Int{ return num1 + num2 } funminus(num1:Int,num2:Int):Int{ return num1-num2 } funmain(){ val num1=100 val num2=50 val result1=num1Andnum2(num1,num2,::plus) val result2= num1Andnum2(num1,num2,::minus) println(result1) println(result2) }
Lambda表达式改进
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
funnum1Andnum2(num1:Int,num2:Int,operation: (Int,Int)->Int):Int{ val result=operation(num1,num2) return result } funmain(){ val num1=100 val num2=50 val result1=num1Andnum2(num1,num2){ num1,num2->num1+num2 } val result2= num1Andnum2(num1,num2){ num1,num2->num1-num2 } println(result1) println(result2) }
实例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
fun StringBuilder.build( block:StringBuilder.()->Unit):StringBuilder{ block() returnthis } funmain(){ val list= listOf("Apple","Banana","Orange","Pear","Grape") val result=StringBuilder().build { append("Start eating fruits\n") for(fruit in list){ append(fruit).append("\n") } append("Ate all fruits") } println(result.toString()) }
内联函数
用法
使用inline关键字,在高阶函数前加上inline即可
作用
可以将使用Lambda表达式带来的运行时开销完全消除
实例
1 2 3 4
inlinefunnum1Andnum2(num1:Int,num2:Int,operation: (Int,Int)->Int):Int{ val result=operation(num1,num2) return result }