gpt4 book ai didi

rust - 我可以从不可变的 BTreeMap 中获取值吗?

转载 作者:行者123 更新时间:2023-12-03 11:45:01 27 4
gpt4 key购买 nike

下面的两个代码块是等效的,但由于某种原因,我在第二个代码块上遇到了编译器错误。
我很难理解为什么 names在一个版本中借用,而不是在另一个版本中。
我试图弄清楚如何从不可变的 BTreeMap 中读取数据。 ,但似乎没有明确的方法。
工作正常:

let region_name: Option<String> = match subdivision.to_owned() {
Some(division) => match division.names.unwrap().get("en") {
Some(name) => Some(name.to_string()),
_ => None,
},
_ => None,
};
不编译:
let region_name: Option<String> = subdivision
.to_owned()
.and_then(|division|division.names)
.and_then(|names| names.get("en"))
.and_then(|name| Some(name.to_string()));
编译器消息:
error[E0515]: cannot return value referencing function parameter `names`
--> src/lib.rs:82:27
|
82 | .and_then(|names| names.get("en"))
| -----^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| `names` is borrowed here
subdivision如下:
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Subdivision<'a> {
pub geoname_id: Option<u32>,
pub iso_code: Option<&'a str>,
pub names: Option<BTreeMap<&'a str, &'a str>>,
}

最佳答案

.and_then(|names| names.get("en"))
names在函数(或闭包)的末尾被删除,但您试图返回 names.get("en") ,它引用了 names 中的值( Option<&&str>)。
.and_then(|data| data.get("en").map(|s| s.to_string()))
此代码可能有效。

关于rust - 我可以从不可变的 BTreeMap 中获取值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63370075/

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