提问人:Bingzheng Wu 提问时间:8/28/2021 更新时间:8/29/2021 访问量:481
该项目的全局 HashMap 的生命周期,由 Rust 中的 lazy_static
The item's lifetime of global HashMap by lazy_static in Rust
问:
我是 Rust 的新手。
我定义了一个全局 HashMap。User
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
答:
-1赞
Kartheek Tammana
8/28/2021
#1
如果你必须在每个 中有一个 s 列表,并且每个 s 都有一个唯一的 ,只需将 s 存储在 的每个实例中(以及你可能会引用 a 的其他任何地方)。 是,所以一切正常。User
Class
User
id
id
Class
User
u64
Clone
评论
lazy_static
'static
name
User
User
String
&str
String
User
&Class
Arc<Class>
&Class
Class