我有一个简单的解析函数。
它运行良好,但我希望像这样具有选项或结果返回类型:
这个实现:
很遗憾,出现了以下错误:
use std::collections::BTreeMap;
fn parse_kv(data: &str) -> BTreeMap<String, String> {
data.split('&')
.map(|kv| kv.split('='))
.map(|mut kv| (kv.next().unwrap().into(), kv.next().unwrap().into()))
.collect()
}
#[test]
fn parse_kv_test() {
let result = parse_kv("test1=1&test2=2");
assert_eq!(result["test1"], "1");
assert_eq!(result["test2"], "2");
}
它运行良好,但我希望像这样具有选项或结果返回类型:
fn parse_kv(data: &str) -> Option<BTreeMap<String, String>>
这个实现:
fn parse_kv(data: &str) -> Option<BTreeMap<String, String>> {
Some(data.split('&')
.map(|kv| kv.split('='))
.map(|mut kv| (kv.next()?.into(), kv.next()?.into()))
.collect())
}
很遗憾,出现了以下错误:
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> src/ecb_cut_paste.rs:23:24
|
23 | .map(|mut kv| (kv.next()?.into(), kv.next()?.into()))
| ^^^^^^^^^^ cannot use the `?` operator in a function that returns `(_, _)`
|
= help: the trait `std::ops::Try` is not implemented for `(_, _)`
= note: required by `std::ops::Try::from_error`
在闭包中是否可以使用 ?
操作符来从该函数返回 None
?如果不能,我需要如何处理这种情况?
?
运算符之后链接了其他函数。 - undefined?
运算符并不存在。此外,经过快速浏览,我很难看出如何将其他问题的思路轻松应用到这个问题上。我认为社区会受益于对这个问题重新回答。 - undefined