提问人:Konrad Höffner 提问时间:8/31/2022 最后编辑:Konrad Höffner 更新时间:9/1/2022 访问量:83
如何在 Rust 中预加载lazy_static变量?
How to preload lazy_static variables in Rust?
问:
我使用 Rust 的 lazy_static crate 将常用的数据库对象分配给全局变量,但我不想延迟加载。有没有办法触发lazy_static来预加载变量,或者有没有更好的方法来实现这一点?数据库的所有功能都很昂贵,似乎不足以分配引用。
lazy_static! {
static ref DB: DataBase = load_db();
}
/// this is too slow
#[allow(unused_must_use)]
pub fn preload1() { DB.slow_function(); }
/// this does not cause lazy static to trigger
pub fn preload2() { let _ = &DB; }
答:
1赞
PitaJ
9/1/2022
#1
_
不绑定,因此请使用变量名称(带有前导下划线以避免 lint):
use lazy_static::lazy_static; // 1.4.0
struct DataBase;
fn load_db() -> DataBase {
println!("db loaded");
DataBase
}
lazy_static! {
static ref DB: DataBase = load_db();
}
fn main() {
let _db: &DataBase = &*DB; // prints "db loaded"
}
评论
1赞
Chayim Friedman
9/1/2022
问题不在于,而在于应该如此。另一种解决方案是键入 annotate 以强制执行 deref 强制,即使使用 ._
&
&*
&DataBase
_
评论
GRAPH
DB
lazy_static
once_cell