如何在Kotlin中省略lambda参数?

如何在Kotlin中省略lambda参数?,lambda,kotlin,Lambda,Kotlin,有时我不使用所有lambda参数,如下面示例中的第二个参数,它是更改事件中的旧值: selected.onChange { value, _ -> checkBox.isChecked = value } 我如何省略它们?导致代码混乱,影响可读性。以前我使用了上述方法,但在kotlin 1.0.0-beta-1103中保留了下划线。您可以使用(即反勾号)或重载onChange 反勾号 selected.onChange { value, `_` -> checkBo

有时我不使用所有lambda参数,如下面示例中的第二个参数,它是更改事件中的旧值:

selected.onChange { value, _ ->
    checkBox.isChecked = value
}
我如何省略它们?导致代码混乱,影响可读性。以前我使用了上述方法,但在kotlin 1.0.0-beta-1103中保留了下划线。

您可以使用(即反勾号)或重载
onChange

反勾号

selected.onChange { value, `_` ->
    checkBox.isChecked = value
}
重载
onChange

interface Listener<T1, T2> {
    fun onChange(f: (T1, T2) -> Unit) // original method
    fun onChange(f: (T1) -> Unit)     // new method
}
然后,您可以根据需要调用
onChange

selected.onChange { value ->
    checkBox.isChecked = value
}

从1.1开始,您可以完全做到:

未使用变量的下划线(自1.1起)

如果lambda参数未使用,则可以改为放置下划线 其名称:

map.forEach { _, value -> println("$value!") }


我应该补充一点,编译器现在会为未使用的lambda参数生成一个警告,并且Android Studio有一个新的相应快速修复程序

如果您经常使用lambda来保证这一点,那么您可以添加一个扩展函数,对不希望删除的参数执行相同的操作。
map.forEach { _, value -> println("$value!") }