如何在Kotlin中省略lambda参数?

时间:2015-10-30 06:51:53

标签: lambda kotlin

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

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

如何省略它们?导致代码混乱并损害可读性的原因。以前我用的是上面的方法,但在kotlin 1.0.0-beta-1103下划线是保留的。

2 个答案:

答案 0 :(得分:7)

从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提供新的相应快速修复

答案 1 :(得分:4)

您可以使用escaping for Java identifiers that are keywords in Kotlin(即反引号)或重载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(或您的示例中的任何类型fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) } ),那么您可以使用extension function

onChange

然后,您可以按照自己的意愿致电selected.onChange { value -> checkBox.isChecked = value }

{{1}}