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
相关产品推荐
相关产品推荐

