Я использую ящик регулярных выражений, чтобы найти текст с этим регулярным выражением:
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`
Я предполагаю, что это потому, что я пытаюсь сложить Result
в i32
, но поскольку мне нужно проанализировать второе значение захвата, а также нужен этот случай otherwise
в моем match
, как я могу это исправить?