Ich versuche, eine Kotlin-Funktion zu schreiben, die ein Lambda unter Verwendung eines Parameters zurückgibt. Ich versuche, Code wie die folgenden zu verwenden, um dies zu tun:Kotlin "erwartet keine Parameter" beim Versuch, Inline-Lambda zurückzugeben
fun <T> makeFunc() : (T.() -> Unit) {
return { t: T ->
print("Foo")
}
}
Hinweis: Im aktuellen Programm wird die Funktion komplexer ist und verwendet t
.
Kotlin lehnt dies als ungültig ab und gibt unter t: T
den Fehler 'Erwartete keine Parameter' an.
jedoch Zuordnung dieser Lambda auf eine Variable wird zunächst nicht abgelehnt und funktioniert gut:
fun <T> makeFunc() : (T.() -> Unit) {
val x = { t: T ->
print("Foo")
}
return x
}
Diese beiden Schnipsel scheinen identisch, also warum ist dies der Fall? Sind geschweifte Klammern nach einer return
Anweisung interpretiert als etwas anderes als ein Lambda?
Außerdem teilt IntelliJ mir mit, dass der Wert der Variablen inline sein kann, während dies scheint, den Fehler zu verursachen.