如何在Kotlin中省略lambda参数?
有时我不会使用所有的lambda参数,如下面的示例中的第二个参数,这是change事件中的旧值:
selected.onChange { value, _ -> checkBox.isChecked = value }
我如何省略它们? 导致代码混乱,并伤害可读性。 以前我用过上面的方法,但是在kotlin 1.0.0-beta-1103下划线是保留的。
从1.1开始,你可以做到这一点:
下划线为未使用的变量(从1.1开始)
如果lambda参数未使用,则可以放置下划线而不是其名称:
map.forEach { _, value -> println("$value!") }
https://kotlinlang.org/docs/reference/lambdas.html#underscore-for-unused-variables-since-11
我应该补充一点,编译器现在会为未使用的lambda参数生成一个警告,并且Android Studio有一个新的相应的快速修复
您可以使用转义为Kotlin中的关键字 (即反引号)的Java标识符或重载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 }
如果你不能改变Listener<T1, T2>
(或者你的示例中可以设置的任何类型),那么你可以使用一个扩展函数 :
fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) }
然后你可以打电话来改变你想要的:
selected.onChange { value -> checkBox.isChecked = value }