今天看到一种新的lambda写法,里面使用了.(), 直接看下面的例子吧
class MainActivity : ComponentActivity() {
val repeatFun: String.(Int) -> String = { this.repeat(it) }
val repeatFunV2: (String, Int) -> String = { str, times -> str.repeat(times) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
"a".repeatFun(10)
repeatFun("1", 10)
repeatFunV2("a", 20)
}
}
repeatFun和repeatFunV2在写法上是等价的,不同的是repeatFun更为简洁,他实际上接收了两个参数,一个this,一个it。
并且,这种直接可以作为String的扩展函数存在。
反编译之后,可以看到编译的class文件基本上是一样的。
这就是kotlin的语法糖而已。