Kotlin中Int.()是什么含义?如何为myVar变量赋值?
Kotlin中
Int.() -> Int的含义与赋值方法 一、Int.()的含义
这是带接收者的函数类型,和普通的(Int) -> Int本质不同:
- 普通的
(Int) -> Int是“接收一个Int参数、返回Int的函数”,调用形式为函数名(参数); - 而
Int.() -> Int是“以Int作为接收者、返回Int的函数”,函数内部可通过this指代这个Int实例,调用形式为接收者实例.函数名(),和调用Int的扩展函数逻辑完全一致。
简单说,这种类型就是把扩展函数的逻辑抽成了可动态赋值的变量,让你能灵活替换某个Int实例的扩展行为。
二、给myVar赋值的几种方式
1. 直接用lambda表达式赋值
lambda内部可直接用this访问接收者的Int值,甚至可以省略this(Kotlin会自动识别接收者):
lateinit var myVar: Int.() -> Int // 写法1:显式使用this myVar = { this + 1 } println(5.myVar()) // 输出6 // 写法2:省略this myVar = { this * 2 } println(3.myVar()) // 输出6
2. 引用已定义的扩展函数
如果已经写好Int的扩展函数,直接用函数引用赋值即可:
// 先定义一个Int的扩展函数 fun Int.timesThree(): Int = this * 3 // 用函数引用赋值 myVar = Int::timesThree println(4.myVar()) // 输出12
3. 适配普通函数
如果只有接收Int参数的普通函数,可通过lambda把接收者作为参数传入:
// 普通函数:接收Int参数,返回Int fun square(num: Int): Int = num * num // 包装成带接收者的lambda赋值 myVar = { square(this) } println(5.myVar()) // 输出25
内容的提问来源于stack exchange,提问作者Vitalii
相关产品推荐
相关产品推荐

