gpt4 book ai didi

rust - 在闭包中通过引用保存一个值

转载 作者:行者123 更新时间:2023-11-29 08:12:02 26 4
gpt4 key购买 nike

鉴于以下示例,我想在我的闭包中通过引用使用 z:

struct Foo<'a> {
x: Box<dyn Fn() + Send + Sync + 'a>,
y: Box<dyn Fn() + Send + Sync + 'a>,
}

impl<'a> Foo<'a> {
fn new(z: &'a str) -> Foo<'a> {
let x = Box::new(|| { z; });
let y = Box::new(|| { z; });
Foo {
x,
y,
}
}
}

但是,这个实现给出了错误:

闭包可能比当前函数长寿,但它借用了当前函数所拥有的“z”

我可以使用 move 但我想通过引用来完成。我怎样才能让编译器满意?

我目前的想法是将函数和闭包设置为相同的生命周期,但我找不到相关文档。

最佳答案

I can use move but I'd like to do it by reference. How can I satisfy the compiler?

在这种情况下,您是通过引用来完成的。 z 已经是一个引用,因此您可以移动 一个引用。通过省略 move,您将创建一个类型为 &'b &'a str 的新引用(&'b 仅存在于内部你的功能)。

关于rust - 在闭包中通过引用保存一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55902644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com