Rust 里,async 放在闭包竖线前后,借用能力会变。 从 Rust 1.85 起,async || {} 是稳定语法。调用它先得到 Future,闭包… · @BaiBtw · TwKit
@BaiBtw
Rust 里,async 放在闭包竖线前后,借用能力会变。 从 Rust 1.85 起,async || {} 是稳定语法。调用它先得到 Future,闭包体随后由 Future 执行。 常见的 || async {} 是普通闭包返回异步块;返回的 Future 不能借用闭包自身的捕获字段。async || {} 支持这种借用:例如捕获一个可变 Vec,在 await 取得字符串后再 push 进去。每次调用可以重新借用这份状态,无需为了绕过这个限制复制数据。 配套的 AsyncFn、AsyncFnMut、AsyncFnOnce 对应不同调用方式:共享借用、可变借用、消耗闭包。具体实现哪些,取决于闭包怎样使用捕获值。 另一个差别在回调签名。for<'a> Fn(&'a u8) -> Fut 要用同一个 Fut 类型,难以表达返回 Future 随输入借用生命周期变化;for<'a> AsyncFn(&'a u8) 能直接表达这类异步回调。 这里增加的是表达能力。Future 借用闭包时,生命周期仍然受约束;async move 也只说明怎样捕获环境,不能据此断定每次调用都会把数据搬走。
曝光 16 · 评论 0 · 点赞 0 · 书签 0
查看原帖