# kotlin鲜为人知的高级操作


## kotlin 解构

这个可是真的方便, 昨天刚学到的操作, 对于数据类 kotlin 提供了这种方便的赋值操作真的很舒服

![](https://cdn.jsdelivr.net/gh/zsqw123/cdn@master/picCDN/20210211164125.png)

你还可以用于集合中:
![](https://cdn.jsdelivr.net/gh/zsqw123/cdn@master/picCDN/20210211165526.png)

## kotlin 中缀扩展函数 infix

infix 只能作用与扩展函数上, 具体用法如下:
![](https://cdn.jsdelivr.net/gh/zsqw123/cdn@master/picCDN/20210211172803.png)

```kotlin
infix fun Person.changeSex(newSex: Boolean) {
        this.sex = newSex
}
    
person changeSex false
```

扩展函数的 this 会被充当为左边的变量, 扩展函数的参数将会被视为右边的变量, 调用时候直接作为中缀使用即可, 便会执行该扩展函数.

- 有一说一, 中缀函数在有些情况下反而听影响阅读的, 要视具体情况而定.

最后叠个杀人书:(不是

```kotlin
internal tailrec suspend inline infix operator fun <reified T> T.plus(crossinline action: suspend (Int) -> Unit): Int {
    delay(100)
    action(1)
    return 1
} // 貌似是我研究出来最长的 kotlin 的 fun 前缀了
```



[源码点我](https://github.com/zsqw123/learn-kt/blob/master/src/main/kotlin/210211.kt)
