То, что вы здесь делаете, пытается назвать юнит (String, String) -> Unit
.Помимо несуществующих переменных, вы получаете Unit, когда вызываете функцию.
Если вы знакомы с Java (что немного более понятно), у вас есть:
void foo(String a, String b) { ... }
BiConsumer consumer = foo(a, b);
Что недопустимо, потому что в данном случае пустота не являетсяJava, BiConsumer.Эквивалентно, в вашем случае a (я, честно говоря, не помню, как были названы функции, но это что-то вроде) KFunction2 не является модулем.
Чтобы получить фактическую ссылку на метод, вам нужно использовать ::
.Используя .
в Java или Kotlin, вы вызываете функцию;Вы не возвращаете саму функцию, что, я полагаю, является вашим намерением.
val callback: (String, String) -> Unit = ::foo
В отличие от Java, вы не обязаны располагать что-либо слева от оператора.Если вам позже понадобится расширить область действия вашего метода (т. Е. Он будет в экземпляре), вы поместите его слева:
var someClassWithAFunction = ....
var callback: (String, String) -> Unit = someClassWithAFunction::foo
Но особенности использования, выходящие за рамки вопроса, не слишком важныв данный момент.
Получив ссылку на метод, вы можете вызывать его как обычную функцию (то, что вы изначально делали при назначении - callback(...)
).Тем не менее, вам нужно добавить в него функцию, чтобы он был действительным синтаксисом, но я предполагаю, что вы уже делаете это, и просто ради MCVE написано так, как оно есть.