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")
}
J'ai récemment trébuché sur la syntaxe d'appeler une fonction dans Kotlin et je ne comprends pas: l'option poing est clair - c'est un lambda, mais le second ne ressemble pas à une syntaxe habituelle d'appeler une fonction avec le paramètre requis. Les parenthèses où normalement les params doivent être placés sont vides et à la place le paramètre de fonction vient dans le corps de l'appelant! Comment est-ce possible et pour quoi est-ce nécessaire?Kotlin: mise en œuvre Fonction-param dans un corps d'un appelant
Notez également que si une fonction n'a qu'un seul paramètre fonctionnel, les parenthèses peuvent être omises: 'lazyProperty {42}' – hotkey