带接收者的函数字面量(receiver function literal)
在 Kotlin
中,R.()->T
是一种函数类型声明,属于带接收者的函数字面量(receiver function literal)。
1. 结构分解
R
表示接收者类型(receiver type)()
表示函数参数列表(这里为空)T
表示返回值类型
2. 语义含义
- 这种声明表示一个在
R
类型上下文(作用域)中执行的函数,可以访问R
的成员(属性和方法),最终返回T
类型结果。
3. 与普通函数类型的区别
- 普通函数:
(R) -> T
需要显式接收参数 - 带接收者:
R.()->T
隐含this指向接收者
4. 典型使用场景
-
DSL 构建(如 Android 的 Kotlin DSL )
-
扩展函数参数
-
类型安全的构建器模式
示例说明:
// 定义接收者类 class Person { var name = "" fun sayHello() = println("Hello, $name") } // 接收带接收者的函数参数 fun setupPerson(person: Person, block: Person.() -> Unit) { person.block() // 在person上下文中执行block } // 使用 setupPerson(Person()) { name = "Alice" // 可以直接访问Person的成员 sayHello() // 输出:Hello, Alice }