如何在 Kotlin 中省略 lambda 参数?
How to omit lambda parameters in Kotlin?
有时我不会使用所有 lambda 参数,例如下面示例中的第二个参数,它是更改事件中的旧值:
selected.onChange { value, _ ->
checkBox.isChecked = value
}
如何省略它们?导致代码混乱并损害可读性。之前我用的是上面的方法,但是在kotlin 1.0.0-beta-1103下划线是保留的
您可以使用 escaping for Java identifiers that are keywords in Kotlin(即反引号)或重载 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>
(或您示例中的任何类型 settable
),那么您可以使用 extension function:
fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) }
然后您可以按需要调用 onChange
:
selected.onChange { value ->
checkBox.isChecked = value
}
从 1.1 开始,您完全可以这样做:
Underscore for unused variables (since 1.1)
If the lambda parameter is unused, you can place an underscore instead
of its name:
map.forEach { _, value -> println("$value!") }
https://kotlinlang.org/docs/reference/lambdas.html#underscore-for-unused-variables-since-11
我应该补充一点,编译器现在会针对未使用的 lambda 参数生成警告,并且 Android Studio
有一个新的对应快速修复
有时我不会使用所有 lambda 参数,例如下面示例中的第二个参数,它是更改事件中的旧值:
selected.onChange { value, _ ->
checkBox.isChecked = value
}
如何省略它们?导致代码混乱并损害可读性。之前我用的是上面的方法,但是在kotlin 1.0.0-beta-1103下划线是保留的
您可以使用 escaping for Java identifiers that are keywords in Kotlin(即反引号)或重载 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>
(或您示例中的任何类型 settable
),那么您可以使用 extension function:
fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) }
然后您可以按需要调用 onChange
:
selected.onChange { value ->
checkBox.isChecked = value
}
从 1.1 开始,您完全可以这样做:
Underscore for unused variables (since 1.1)
If the lambda parameter is unused, you can place an underscore instead of its name:
map.forEach { _, value -> println("$value!") }
https://kotlinlang.org/docs/reference/lambdas.html#underscore-for-unused-variables-since-11
我应该补充一点,编译器现在会针对未使用的 lambda 参数生成警告,并且 Android Studio
有一个新的对应快速修复