我想从一个文件中加载数据,然后将这些数据(包括相当大的数组)缓存到一个静态变量中。显然,这不是首选的做法,但:
怎样才能在锈病中做到这一点?
我发现懒静解决了类似的问题,但只针对不需要外部资源的代码(即理论上可以在编译时进行评估的项)。
发布于 2015-01-28 13:04:35
您不能在程序启动时进行初始化,但可以在第一个方法调用时进行初始化。所有进一步的调用都将访问缓存的值,而不是重新计算值。
因为生锈禁止在静态变量中使用析构函数,所以您需要进行自己的清理管理。从逻辑上讲,这意味着你需要不安全的代码来破坏铁锈的安全系统。下面的示例使用static mut变量缓存堆分配的对象(本例中为i32 )。单身汉的功能就像单身汉。
只需记住在完成之后从c调用cachefree()即可。
use std::{ptr, mem};
static mut cache: *const i32 = 0 as *const i32;
unsafe fn cacheload() -> i32 {
if cache == ptr::null() {
// do an expensive operation here
cache = mem::transmute(Box::new(42));
}
return *cache;
}
unsafe fn cachefree() {
if cache != ptr::null() {
let temp: Box<i32> = mem::transmute(cache);
cache = ptr::null();
drop(temp);
}
}
fn main() {
let x;
unsafe {
x = cacheload();
cachefree();
}
println!("{}" , x);
}https://stackoverflow.com/questions/28190153
复制相似问题