0

我是 Rust 的新手。

我定义了一个Userby的全局 HashMap lazy_static

里面有一生User,所以我要在里面设置一生lazy_static。好像只能'static用在lazy_static

这是一个问题:我现在可以将“非静态”用户插入 HashMap 吗?

这是插入非静态用户的代码:

use std::collections::HashMap;
use lazy_static::lazy_static;
use std::sync::Mutex;

struct User<'a> {
    name: &'a str,
    score: f32,
}

lazy_static! {
    static ref USERS: Mutex<HashMap<u64, User<'static>>> = Mutex::new(HashMap::new());
}

fn new_user(id: u64, name: &str, score: f32) {
    let user = User { name, score };
    USERS.lock().unwrap().insert(id, user);
}
fn remove_user(id: u64) {
    USERS.lock().unwrap().remove(&id);
}

fn main() {
    new_user(1, "hello", 1.2);
    remove_user(1);
}

这是错误:

error[E0621]: explicit lifetime required in the type of `name`
  --> src/main.rs:16:38
   |
16 |     USERS.lock().unwrap().insert(id, user);
   |                                      ^^^^ lifetime `'static` required

4

1 回答 1

-1

如果您必须User在 each 中有一个 s列表Class,并且 eachUser有一个唯一的 s id,只需将ids 存储在每个实例中Class(以及您可能引用 a 的任何其他位置User)。u64Clone,所以一切正常。

于 2021-08-28T15:48:34.830 回答