Kotlin如何通过运行示例解释{}或()
1,2次跑步将带来乐趣 3-不会执行 4-这是一个错误 通过这个例子,我发现()和{}有不同的含义。Kotlin如何通过运行示例解释{}或(),kotlin,Kotlin,1,2次跑步将带来乐趣 3-不会执行 4-这是一个错误 通过这个例子,我发现()和{}有不同的含义。 如果有人能解释Kotlin是如何解释这4个案例的,我将不胜感激 在kotlin中,当您使用{}并在其中写入内容时,意味着您正在将一个块传递给后面的lambda 当您使用()时,表示您正在传递一个值,因此: run(someFunction())->这意味着您将someFunction()的返回值作为参数传递给run(),这将失败,因为run不将值作为参数,但它将lambda作为参数 run{so
如果有人能解释Kotlin是如何解释这4个案例的,我将不胜感激 在kotlin中,当您使用
{}
并在其中写入内容时,意味着您正在将一个块传递给后面的lambda
当您使用()
时,表示您正在传递一个值,因此:
run(someFunction())
->这意味着您将someFunction()
的返回值作为参数传递给run()
,这将失败,因为run
不将值作为参数,但它将lambda作为参数run{someFunction}
->这意味着您正在传递一个lambda
或块
,以便在run
正文中调用。这将起作用,因为它只满足run
函数签名public内联趣味跑(block:()->R):R
如果您看到run
函数的声明
public内联趣味跑(block:()->R):R{
合同{
callsInPlace(块,调用种类,恰好一次)
}
返回块()
}
它需要一块(λ)签名()->R
。而圆括号({}
)创建了该签名的lambda
例如,{}
具有签名()->单元
,{4}
具有签名()->Int
。它们与run函数兼容
当您调用run时,实际发生的情况是:
运行{topLevel()}
//相当于
运行(){topLevel()}
//相当于
运行({topLevel})
希望您完全理解lambda,它是由大括号{}
创建的,可以放在函数调用之外
现在,如果您讨论::
运算符,它将返回函数的引用,该引用本身就是lambda签名
例如,::topLevel
将返回()->Unit
,因为它不接受任何参数,也不返回任何内容(即Unit)
第二个和第四个不起作用,因为 第二步:
run{::topLevel}
将()->()->单元
传递给run。i、 e.它传递一个函数,该函数返回对函数topLevel
的引用。因此,要让它发挥作用,你必须写:
运行{::topLevel}()
它所做的是返回::topLevel
,我们使用调用topLevel
的()
调用它
第四个不会编译,因为您正在传递通过调用它返回的
topLevel
函数的单位(返回类型),就像topLevel()
{}
是签名()->Unit
的lambda,而()
是调用操作符的函数。第一个和第三个将编译,而不是第二个
fun main (){
run(::topLevel)
run{::topLevel}
run{topLevel()}
run(topLevel())
}
fun topLevel() = println("print something")
public inline fun <R> run(block: () -> R): R