Учитывая следующий пример, я хотел бы использовать 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,
}
}
}
Однако эта реализация выдает ошибку:
closure may outlive the current function, but it borrows 'z', which is owned by the current function
.
Я могу использовать move
, но я бы хотел сделать это по ссылке. Как я могу удовлетворить компилятор?
Моя текущая мысль - установить функцию и замыкания на одно и то же время жизни, но я не смог найти документацию по этому вопросу.