三种函数格式
1,函数字面值
1.1,Lambda
1.2,匿名函数
2,反射引用普通函数
3,实现函数类型接口的类
首先定义一个需要函数作为参数的函数
fun myFunIns(data:Int, myFun:(arg:Int)->Int):Int{
return myFun(data)
}
注意其中定义的函数类型是 (arg:Int)->Int ,也即参数是一个Int,返回一个Int
这是第一种格式,即函数字面值的Lambda表示法
var result1 = myFunIns(123, {
it * 2
})
上面利用 it 做了简化。也可以将 lambda 抽取出来,此刻无法使用 it 简化:
var result1 = myFunIns(123, {
data ->
data * 2
})
第二种格式,是函数字面值的匿名函数
var result2 = myFunIns(123, fun(data:Int):Int{
return data * 3
})
同样,匿名函数可以抽取出来
val result2_fun = fun(data:Int):Int{ //We can extract it out
return data * 3
}
第三种是反射引用格式
fun myFun(data:Int):Int{
return data * 4
}
val result3 = myFunIns(123, ::myFun)
第四种是偶然看到的,通过一个类实现一个接口,该接口有一个函数。
class MyFun:(Int)->Int{
override operator fun invoke(data:Int):Int{
return data * 5
}
}
val result4 = myFunIns(123, MyFun())
比较绕,尚不知何种情况使用
实践代码:https://gist.github.com/maxyou/6527b0f2019704ce7ae257d5cb17791b