lambda 函数中的类型不匹配 - Kotlin

Type mismatch in lambda function - Kotlin

我想从字符串资源中获取文本,取决于item.route,它在下面的代码之前指定。

但是整个“when”表达式给我错误: “类型不匹配:推断类型为 () -> Int,但预期为 Int。” 我不知道如何解决它。


Text(
        text = stringResource(id = {
            when (item.route) {
                "menu_screen" -> R.string.menu
                "orders_screen" -> R.string.orders
                else -> R.string.orders
            }
        }),
        textAlign = TextAlign.Center
    )

只需删除多余的花括号 ;)

Text(
    text = stringResource(id = 
        when (item.route) {
            "menu_screen" -> R.string.menu
            "orders_screen" -> R.string.orders
            else -> R.string.orders
        }
    ),
    textAlign = TextAlign.Center
)

当您将 方括号 { } 放在某物周围时,它会被解释为 lambda 函数。 “裸”是指不在 class/fun/when/if/else 之后。您需要删除放置在那里的额外括号。

Text(
    text = stringResource(id = 
        when (item.route) {
            "menu_screen" -> R.string.menu
            "orders_screen" -> R.string.orders
            else -> R.string.orders
        }
    ),
    textAlign = TextAlign.Center
)

一些其他语言(例如 Java)允许您用方括号括起代码,以限制内部声明的变量的范围或计算采用多个表达式的内容。要在 Kotlin 中执行此操作,您必须使用作用域内联函数,例如 run { }.