У меня есть функция, которая выполняет замену строки на месте через regex::Regex::replace
через замыкание, которое выполняет некоторые операции с Captures
:
pub fn solve_dice_expression(expression: String) -> Result<i64, Box<dyn Error>> {
lazy_static! {
static ref PATTERN: Regex = Regex::new(r"(\d+)d(\d+)").expect("Problem compiling regex");
}
// For every match on the Dice expression regex, roll it in-place.
let rolled_expression = PATTERN.replace(&expression, |caps: &Captures| {
let diceroll_str = &caps.get(0).unwrap().as_str().to_string();
let dice = Dice::from_string(&diceroll_str).unwrap();
return format!("{}", roll_dice(&mut rng, &dice));
});
// Calculate the result
let result = eval(&rolled_expression)?.as_int()?;
return Ok(result);
}
Я пытаюсь всплыть при возврате ошибок Result<..., Box<dyn Error>>
, который в основном работает через ?
. Однако в закрытии, переданном в regex::Regex::replace
, я не уверен, как распространять любые возможные ошибки, которые могут произойти, так как он ожидает, что закрытие вернет String
, а не Result
.
Что бы правильный способ обработки ошибок, происходящих в этом замыкании?