我正在使用 regex crate 用这个 regex 查找一些文本:
lazy_static! {
static ref FIND_STEPS_RE: Regex =
Regex::new(r"my regex").unwrap();
}
我想找到所有可能的捕获并遍历它们:
FIND_STEPS_RE.captures_iter(script_slice)
每个捕获的元素由 2 个值组成:一个操作和一个数字。例如,输出可能是:
[("+", "10"), ("-", "20"), ("*", "2")]
我想迭代它,解析数字并应用操作。
我试过了:
let e = FIND_STEPS_RE.captures_iter(script_slice)
.fold(0, |sum, value| apply_decoding_step)?;
哪里apply_decoding_step
是:
fn apply_decoding_step(sum: i32, capture: regex::Captures<>) -> Result<i32> {
let number = parse_number(&capture[2])?;
match &capture[1] {
"+" => Ok(s + number),
"-" => Ok(s - number),
"*" => Ok(s * number),
"/" => Ok(s / number),
_ => bail!("Unknown step operator"),
}
}
但我得到了这个错误:
error[E0271]: type mismatch resolving `<fn(i32, regex::Captures<'_>) -> std::result::Result<i32, Error> {apply_decoding_step} as std::ops::FnOnce<(i32, regex::Captures<'_>)>>::Output == i32`
--> src/main.rs:122:10
|
122 | .fold(seed, apply_decoding_step);
| ^^^^ expected enum `std::result::Result`, found i32
|
= note: expected type `std::result::Result<i32, Error>`
found type `i32`
我认为这是因为我试图将 a 折叠Result
成 a i32
,但由于我需要解析第二个捕获值并且还需要otherwise
在我的情况下,我match
该如何解决这个问题?