gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:31:10 26 4
gpt4 key购买 nike

我正在尝试使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com