以单个lambda表达式为体的Kotlin函数
下面的runMyRunnable和runMyRunnable1之间有什么区别以单个lambda表达式为体的Kotlin函数,kotlin,syntax,Kotlin,Syntax,下面的runMyRunnable和runMyRunnable1之间有什么区别 fun runMyRunnable(runnable: () -> Unit) { runnable() } fun runMyRunnable1(runnable: () -> Unit) = { runnable() } // Prints "Hello world" runMyRunnable { println("Hello world") } //
fun runMyRunnable(runnable: () -> Unit) { runnable() }
fun runMyRunnable1(runnable: () -> Unit) = { runnable() }
// Prints "Hello world"
runMyRunnable { println("Hello world") }
// Why it prints nothing ??
runMyRunnable1 { println("Hello world) }
// Why it Prints "Hello world" ??
runMyRunnable1 { println("Hello world") } ()
函数声明后的
=
而不是大括号{
是立即返回内容的缩写,甚至不必声明返回类型。因此,没有此快捷方式的函数runMyRunnable1
相当于
fun runMyRunnable1(runnable: () -> Unit): () -> Unit {
return { runnable() }
}
由于将大括号放在=
后面,因此大括号定义了lambda函数
最后一行调用函数,最后的
()
调用返回的函数,即lambda。函数声明后的=
,而不是左括号{
是立即返回内容的缩写,甚至不必声明返回类型。因此,不使用此快捷方式的函数runMyRunnable1
相当于
fun runMyRunnable1(runnable: () -> Unit): () -> Unit {
return { runnable() }
}
由于将大括号放在=
后面,因此大括号定义了lambda函数
最后一行是调用函数,最后的
()
是调用返回的函数,即lambda。注意=
登录runMyRunnable1
。这意味着函数返回值{runnable()}
。也就是说,除了返回这个值(这个lambda表达式)之外,它什么都不做。通过执行runMyRunnable1{…}()
1)返回此lambda时使用runMyRunnable1{…}
2)调用此lambda时使用()
。感谢Dmitry,这很有帮助。(要运行runnable,您可以编写=runnable()
,但它没有第一个runMyRunnable
那么惯用。)注意=
登录runMyRunnable1
。这意味着函数返回值{runnable()}
。也就是说,它除了返回这个值(这个lambda表达式)之外什么都不做。通过执行runMyRunnable1{…}()
1)返回这个lambda,同时runMyRunnable1{…}
2)使用()
调用此lambda。感谢Dmitry,这很有帮助。(要运行runnable,您可以编写=runnable()
,但它没有第一个runMyRunnable
那么惯用)