有时我不使用所有lambda参数,例如下面示例中的第二个参数,它是change事件中的旧值:
selected.onChange { value, _ ->
checkBox.isChecked = value
}
Run Code Online (Sandbox Code Playgroud)
我该如何省略它们?导致代码混乱并损害可读性的原因.以前我使用上面的方法,但在kotlin 1.0.0-beta-1103下划线是保留的.
从1.1开始,你可以做到这一点:
未使用变量的下划线(自1.1起)
如果lambda参数未使用,则可以放置下划线而不是其名称:
Run Code Online (Sandbox Code Playgroud)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
}
Run Code Online (Sandbox Code Playgroud)
超载onChange
interface Listener<T1, T2> {
fun onChange(f: (T1, T2) -> Unit) // original method
fun onChange(f: (T1) -> Unit) // new method
}
Run Code Online (Sandbox Code Playgroud)
如果您无法更改Listener<T1, T2>
(或settable
示例中的任何类型),那么您可以使用扩展函数:
fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) }
Run Code Online (Sandbox Code Playgroud)
然后你可以onChange
像你想要的那样调用:
selected.onChange { value ->
checkBox.isChecked = value
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2676 次 |
最近记录: |