rust - 移入封闭的结构从外部借用了引用

标签 rust borrow-checker

我正在尝试使用warpRust Reverse Geocoder在Rust中开发一个非常简单的REST API。我有以下代码:

#[tokio::main]
async fn main() -> Result<()> {
    let loc = reverse_geocoder::Locations::from_memory();
    let geocoding = Arc::new(reverse_geocoder::ReverseGeocoder::new(&loc));

    let sample = warp::get()
        .and(warp::path("loc"))
        .map(move || format!("{}", geocoding.search((42.0, 42.0)).unwrap().record));

    warp::serve(sample)
        .run(([127, 0, 0, 1], 3030))
        .await;
    Ok(())
}
编译器提示loc被借用但生命周期不足。我知道为什么(该值在main函数的末尾删除,但仍在闭包中引用),但是我找不到解决此问题的方法。
ReverseGeocoder 是从Locations字段借来的,而不是Clone,因此我将其包装在Arc中以正确移动它。我无法将ReverseGeocoder设置为自己的Locations
我的问题很简单:如何使loc生存足够长的时间以使此代码可以编译?
提前致谢!

最佳答案

注释中建议的三个解决方案(once_cellBox::leaklazy_static)都可以使用。非常感谢评论作者!首先,我选择了lazy_static,然后进行了重构,最后使用了另一个性能更高的 crate (rgeo),它不需要这样的技巧。
因此,我的问题的答案是:此处的一般解决方案是延长loc的生存期,使其成为'static

关于rust - 移入封闭的结构从外部借用了引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66569782/

相关文章:

rust - 调试格式化程序是否使用取消引用?

io - 如何从 Vec 或 Slice 读取 (std::io::Read)?

reference - 为什么我可以返回对本地文字的引用,而不是对变量的引用?

rust - 我无法反序列化 json String 以使用 serde 进行构造

rust - 如何将 rustc 标志传递给 cargo ?

rust - 为什么不能在同一结构中存储值和对该值的引用?

rust - 为什么通过提取方法进行重构会触发借用检查器错误?

rust - Rust 中的生命周期如何影响可变性?

rust - 在每次循环迭代中删除借位

module - 我如何使 Rust 项在 crate 内公开,但在 crate 外私有(private)?