You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin:如何在Lambda表达式中正确使用if语句?

Kotlin 添加感叹号函数的正确写法及错误解析

正确代码实现

fun main() {
    val addExclamationMark: (String) -> String = { it ->
        if (it.contains("!")) it else it + "!"
    }
    println(addExclamationMark("Hallo Welt"))
}

错误原因拆解

  • if 条件缺少括号:Kotlin 要求 if 表达式的判断条件必须用 () 包裹,原代码中 if it.contains("!") 不符合语法,触发“Expecting a condition in parentheses '(...)'”错误。
  • Lambda 分支语法错误:原代码在 if/else 分支后使用 -> 是完全错误的。Lambda 的 -> 仅用于分隔参数和函数体,而 if 是表达式,分支直接返回结果即可,不需要额外的 ->。这种错误导致编译器无法推断出正确的返回值类型,进而出现“Type mismatch: inferred type is Unit but String was expected”。
  • 语法结构混乱:错误的 -> 让编译器误判为同一行存在多个未分隔的表达式,因此提示“Unexpected tokens (use ';' to separate expressions on the same line)”。

正确写法的核心要点

  • Lambda 参数简化:如果 Lambda 只有一个参数,可以省略 it -> 直接使用默认参数名 it,比如写成:
    val addExclamationMark: (String) -> String = { if (it.contains("!")) it else it + "!" }
    
    显式写出 it -> 更适合复杂场景,可读性更强。
  • if 作为表达式:Kotlin 中 if 是表达式,会返回对应分支的结果,因此不需要在分支里写 return,直接将 if 表达式的结果作为 Lambda 的返回值,完美匹配 (String) -> String 的函数类型要求。

内容的提问来源于stack exchange,提问作者Kerbal Space Program Germany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:05:19