Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在lambda中调用函数和函数引用之间的区别_Kotlin_Function Reference - Fatal编程技术网

Kotlin 在lambda中调用函数和函数引用之间的区别

Kotlin 在lambda中调用函数和函数引用之间的区别,kotlin,function-reference,Kotlin,Function Reference,在以下代码中(在kotlin中) fun问候(){ 打印(“你好!”) } 趣味礼炮{ 打印(“祝您有愉快的一天”) } 趣味主线(args:Array){ //val todoList:ListUnit>=listOf(::问候,::敬礼) val todoList:ListUnit>=listOf({greet()},{sallet()}) for(todoList中的任务){ 任务() } } 使用现在注释的第一种方法(函数引用)与使用第二种方法(仅在lambda中调用函数)相比

在以下代码中(在kotlin中)

fun问候(){
打印(“你好!”)
}
趣味礼炮{
打印(“祝您有愉快的一天”)
}
趣味主线(args:Array){
//val todoList:ListUnit>=listOf(::问候,::敬礼)
val todoList:ListUnit>=listOf({greet()},{sallet()})
for(todoList中的任务){
任务()
}    
}
使用现在注释的第一种方法(函数引用)与使用第二种方法(仅在lambda中调用函数)相比有什么意义

就结果而言,双方都打印“你好!祝您愉快”

您可以通过ide检查签名

::是从方法获取KFunction类型的反射操作

val f2={greet()}是这样的:创建一个新的lambda语句 像


然后打电话给内陆lambda

,在这种情况下,这并不好。一般来说:1)括号较少(在更复杂的表达式中,您将填充括号)。2) 对于具有多个参数的函数,您不需要重新传递它们,因此您将赢得一些空间(并且您的表达式将变得更简单)。它本质上是等价的。用你认为读起来更好的。
fun greet(){
    print("Hello!  ")
}
fun salute(){
    print("Have a nice day ")
}


fun main(args: Array<String>){

    //val todoList: List<()->Unit> = listOf(::greet,::salute)
    val todoList: List<()->Unit> = listOf({greet()},{salute()})

    for(task in todoList){
        task()
    }    
}
() ->  () -> Unit