Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
以单个lambda表达式为体的Kotlin函数_Kotlin_Syntax - Fatal编程技术网

以单个lambda表达式为体的Kotlin函数

以单个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") } //

下面的runMyRunnable和runMyRunnable1之间有什么区别

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
那么惯用)