У меня есть код с изменяемой ссылкой с временем жизни 'static, и я пытаюсь использовать его в цикле, который имеет async move:
fn baz(_s: &mut String) {
// do something
}
fn main() {
let bar: &'static mut String = Box::leak(Box::new("test".to_string()));
loop {
tokio::spawn(async move {
baz(bar);
});
// some conditions here to exit from the loop
}
}
Компилятор Rust предлагает повторное заимствование, но это синтаксически неверно, первый раз, когда я наткнулся на это:
error[E0382]: use of moved value: `bar`
--> src/main.rs:8:33
|
6 | let bar: &'static mut String = Box::leak(Box::new("test".to_string()));
| --- move occurs because `bar` has type `&mut String`, which does not implement the `Copy` trait
7 | loop {
8 | tokio::spawn(async move {
| _________________________________^
9 | | baz(bar);
| | --- use occurs due to use in generator
10 | | });
| |_________^ value moved here, in previous iteration of loop
|
help: consider creating a fresh reborrow of `bar` here
|
8 | tokio::spawn(async move &mut *{
| ++++++
Как я могу использовать эту изменяемую ссылку в таком цикле? Я борюсь против заимствования в цикле и async move хочу сделать копию/клон.
Заполните ошибку для недопустимого предложения, пожалуйста.
@Netwave Спасибо. Вы абсолютно правы. Не думал об этом. Можете ли вы опубликовать ответ, чтобы я мог принять его.
@ChayimFriedman Готово github.com/rust-lang/rust/issues/96908

даже если вы слили это, вы можете иметь только
&mutза раз, так что это никогда не сработает. Вы должны использовать какую-то синхронизацию, возможно,Mutex