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

Kotlin内联函数在参数固定时是否会内联分支代码?

Kotlin内联函数编译后的代码展开结果

我定义了如下Kotlin内联函数:

inline fun run(type: Int, block: (String) -> Unit) {
    when(type) {
        Scenario.A -> { block("A") }
        Scenario.B -> { block("B") }
    }
}

之后进行了两次调用:

run(Scenario.A) { println(it) } 
run(Scenario.B) { println(it) } 

请问编译后的代码会转换为下面哪一种?

第一种:

println("A")
println("B")

第二种:

when(Scenario.A) {
    Scenario.A -> { println("A") }
    Scenario.B -> { println("B") }
}
when(Scenario.B) {
    Scenario.A -> { println("A") }
    Scenario.B -> { println("B") }
}

答案是第二种形式。

Kotlin的内联函数会把整个函数体直接替换到调用位置,同时将传入的Lambda表达式内容内联到对应的调用点。原run函数里的when分支逻辑是函数体的核心部分,会被完整复制到每一处调用run的地方,再把Lambda中的println(it)替换掉block的调用,同时将it替换为对应分支的字符串参数("A"或"B")。

内容的提问来源于stack exchange,提问作者Lionel Briand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:35:57