Кажется, вы запутались, вы никогда не можете использовать функцию без аргументов. Если функция имеет аргументы, вы должны как-то заполнить слот.
Самое близкое, что может иметь отношение к тому, на что вы ссылаетесь, это значения по умолчанию для аргументов.
fun example(boolean: Boolean = true) {}
example()
example(true)
example(false)
Вы можете опустить аргумент, потому что он по умолчанию задан в сигнатуре функции.
Документация
В файле изображения вы видите лямбду.
В первый пример:
signIn(listener: Session...)
Это похоже на обратный вызов. Так что это будет интерфейс или, может быть, абстрактный класс, вызываемый, когда завершается некоторая операция asyn c.
Второй пример, это обратный вызов, реализованный в виде лямбды
signIn() { result ->
//do something
}
В Kotlin последний аргумент, если это лямбда или что-то, что может быть реализовано как лямбда, можно убрать из скобок для syntacti c sugar. Лямбда похожа на анонимную функцию, она является литералом функции.
Например, вы можете объявить лямбду:
val lambda = {text: String -> text.lenght % 2 == 0}
fun setRuleForText(rule: (String)-> Boolean) {...}
setRuleForText(lambda)
setRuleForText() { text: String
text.isNotEmpty()
}
В этом случае аргумент равен kotlin функция. Аргумент rule
является функцией, которая получает String
в качестве аргумента и возвращает Boolean
. Следует отметить, что выражения возвращают последнее записанное значение без необходимости в зарезервированном return
слове.
Это документация . И здесь из хорошего источника вы можете узнать больше о функциях (автор Kotlin сертифицирован, обучен Jetbrains)
В вашем случае (Result) -> Unit
означает, что лямбда должна получить Result
введите в качестве аргумента и затем верните Unit
(единица похожа на void в Java, но больше), нет явного возвращаемого типа.
signIn() { result ->
//do something
}
Большинство типов аргументов в лямбдах выводится автоматически, но если нет, то
signIn() { result: Result ->
//do something
}