gpt4 book ai didi

android - 未使用 lambda 表达式

转载 作者:IT老高 更新时间:2023-10-28 13:39:07 26 4
gpt4 key购买 nike

在使用 Android 的 Switch 时,我将 setOnCheckedChangeListener 附加到它并收到此警告

The lambda expression is unused. If you mean a block, you can use 'run {...}'

这里是代码 fragment :

switchAction.setOnCheckedChangeListener({
_, isChecked ->
{
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
})

使用 run 确实修复了这个警告,但有人知道这背后的原因吗? lambda 表达式是如何被使用的?

最佳答案

您将 Java 的 lambda 表示法与 Kotlin 的 lambda 表示法混合,在这种情况下创建一个返回另一个嵌套 lambda 的 lambda。正确且惯用的语法如下所示:

switchAction.setOnCheckedChangeListener { _, isChecked ->
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}

去掉所有的噪音,一个普通的 lambda 看起来像这样:

{ arg1, arg2 -> returnValue } // Type: (A, B) -> C

你这样做了:

{ arg1, arg2 -> { returnValue } } // Type: (A, B) -> (() -> C)

也可以这样写:

{ arg1, arg2 -> { -> returnValue } } // Type: (A, B) -> (() -> C)

这种表示法更清楚地表明 lambda 不返回返回值,而是返回另一个没有返回返回值的参数的 lambda。

通常,编译器会将其捕获为错误的返回类型,但在您的情况下,不会使用 lambda 的返回值。因此,您只是在创建内部 lambda 而不返回或运行它,这就是您收到警告的原因。

关于android - 未使用 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com