fun lazyProperty(initializer: () -> Int): Int {
val result: Lazy<Int> = lazy(initializer)
return result.value
}
fun main(args: Array<String>) {
// 1.
val bar: Int = lazyProperty({ 1 + 1 })
// 2.
val foo: Int = lazyProperty() {
42
}
println("bar $bar, foo: $foo")
}我最近偶然发现了在Kotlin中调用函数的语法,我就是不明白:第一个选项很清楚-它是一个lambda,但第二个看起来不像用所需参数调用函数的常规语法。通常应该放置参数的括号是空的,取而代之的是函数参数出现在调用者的主体中!这是怎么可能的,需要它做什么?
发布于 2017-07-20 13:33:25
这只是个惯例。如果函数的最后一个参数是函数,则可以在括号外传递lambda。在您的情况下,您有以下选项:
val bar: Int = lazyProperty({ 1 + 1 })
val bar: Int = lazyProperty() { 1 + 1 }
val bar: Int = lazyProperty { 1 + 1 }所有三个选项都是相同的。
如果您的函数有第二个参数(在第一个位置),则调用可能如下所示:
fun lazyProperty(x: Int, initializer: () -> Int): Int {...}
val bar: Int = lazyProperty(7, { 1 + 1 })
val bar: Int = lazyProperty(7) { 1 + 1 }如果您的函数有第二个参数(在第二个位置),则调用可能如下所示:
fun lazyProperty(initializer: () -> Int, x: Int): Int {...}
val bar: Int = lazyProperty({ 1 + 1 }, 7)因此,请始终尝试将Lambda放在函数的最后位置。
https://stackoverflow.com/questions/45195566
复制相似问题