跳转到内容

闭包和 Lambda

Lambda 创建可以传给标准库 helper、存入脚本值或稍后在同一运行时内调用的函数值。它们是普通脚本闭包,不是宿主线程或 async 任务。

Lambda 参数写在 | 分隔符之间。函数体可以是表达式,也可以是块;参数可以带类型提示。

fn add_one(values) {
return values.iter()
.map(|value: i64| value + 1)
.collect_array()
}

闭包会捕获周围作用域中的脚本可见值。被捕获的宿主值仍然是 host ref 或 path proxy;闭包不会把宿主状态变成脚本 GC 拥有的数据,也不会暴露 Rust &mut T

fn above(limit: i64, values) {
return values.iter()
.filter(|value| value > limit)
.collect_array()
}

核心标准库回调点包括 mapfilteranyallfind 等迭代器适配器。惰性适配器是 one-shot 的,终端方法如 collect_array()count() 会消费它们。

闭包执行和其他脚本调用一样受预算约束。Async 函数可以在 await 调用时挂起, 但闭包不会变成 task handle,也不会获得手动 resume 语义。热更新时,挂起 frame 继续使用原来的代码版本;闭包不能跨无关 Runtime 移动。