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

Kotlin中如何正确调用预先定义的lambda表达式?

问题原因

你调用meeples.map { lambda }时,外层的{}本身就是Kotlin中声明lambda的语法,相当于你给map方法传入了一个新的匿名lambda,这个lambda的逻辑是:忽略输入的列表元素,直接返回你预先定义的lambda函数类型对象本身。所以最终map返回的列表元素全是这个函数对象,打印时就输出了它的toString结果(Meeple) -> kotlin.String?。

正确实现方式

有两种写法可以直接调用预先定义的lambda:

  1. 直接将lambda变量作为参数传入map,不需要用花括号包裹:
for (name in meeples.map(lambda)) {
    println(name ?: "[anonymous]")
}
  1. 如果使用花括号写法,需要在内部显式调用lambda并传入当前遍历元素:
for (name in meeples.map { lambda(it) }) {
    println(name ?: "[anonymous]")
}
闭包行为验证结果

Kotlin的lambda会捕获变量的引用而非变量的瞬时值,所以你在定义lambda后修改toFilter = "Jim",实际执行时会使用修改后的值,最终输出结果为:

[anonymous]
Cassidy
David

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:12:04