Что означает «. ()» В Котлине?

Я видел примеры, когда функция имеет аргумент, заданный ClassName. () Это, похоже, не является функцией расширения, которая является ClassName.Function ()

Примером может служить Kotterknife :

private val View.viewFinder: View.(Int) -> View? get() = { findViewById(it) } 

Который я не совсем знаю функцию,

и MaterialDrawerKt

 fun Activity.drawer(setup: DrawerBuilderKt.() -> Unit = {}): Drawer { val builder = DrawerBuilderKt(this) builder.setup() return builder.build() } 

Где код позволяет вам напрямую звонить

 drawer { ... } 

а не давать ему аргументы, окруженные круглыми скобками.

Есть ли какие-либо документы по этому поводу?

Функция, которая ничего не принимает и ничего не возвращает в Котлин, выглядит так:

 var function : () -> Unit 

Хотя разница в том, что функция в вашем коде ничего не возвращает, принимает ничего, но вызывается на объект.

Например,

 class Builder (val multiplier: Int) { fun invokeStuff(action: (Builder.() -> Unit)) { this.action() } fun multiply(value: Int) : Int { return value * multiplier } } 

Важным здесь является то, как мы объявили тип «действия»,

 action: (Builder.() -> Unit) 

Это функция, которая ничего не возвращает, принимает ничего, но вызывается на объект типа «Builder».

Подробнее см. Здесь .

Intereting Posts
Использовать метод / свойство расширения по всему миру Как настроить задачу processResources в сборке Gradle Kotlin Наследование интерфейса – Расширение интерфейса в Котлине Создайте новый список из двух других списков разных типов, сравнивая значения каждого типа Как перекрестные ссылки в параметрах Android – ViewDataBinding.inflate не раздувает вложенное пользовательское представление Если дети RecyclerView соответствуют высоте родителя при использовании конструктора вместо надувания, чтобы создать их Поделитесь модулем Kotlin с проектом Android и Desktop AsyncTask в Android с Kotlin Изменить фрагмент внутри представления на другое? Инструментальные тесты не могут выполняться в библиотечных модулях Android с файлами Kotlin Используйте подпроекты Gradle с мультиплатформой Kotlin Кинжал2 не вводит Kotlin: как использовать несколько Generic в классе? UnsatisfiedDependencyException для приложения Spring Boot 2.0.0.M2 с использованием Kotlin