У меня есть две функции расширения, объявленные в Kotin (1.3):
fun SomeClass.fooBuilder(vararg x: String, fn: ((String) -> Unit)? = null): Result.Builder = TODO()
fun SomeClass.foo(vararg x: String, fn: ((String) -> Unit)? = null): Result = fooBuilder(*x, fn).build()
Что я хочу сделать, это позвонить fooBuilder
из foo
и просто вызвать build()
для результата, возвращенного изfooBuilder
.
К сожалению, приведенный выше код не компилируется, поскольку вызов fooBuilder(*x, fn).build()
завершается неудачно с:
Error:(28, 143) Kotlin: Type mismatch: inferred type is ((String) -> Unit)? but String was expected
Т.е. кажется, что компилятор считает, что я хочу передать дополнительную строку (x
) аргументы, но на самом деле я хочу передать это функция.
Как я могу решить эту проблему, сохранив при этом возможность использовать скобки, чтобы пропустить скобки при указании fn
, как в этом примере:
SomeClass().foo("x") { str -> println("Hello $str") }