【发布时间】:2020-05-17 13:04:11
【问题描述】:
有没有什么办法可以简化下例中的返回(原文抄自here):
use std::num::ParseIntError;
fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
let first_number = match first_number_str.parse::<i32>() {
Ok(first_number) => first_number,
Err(e) => return Err(e),
};
let second_number = match second_number_str.parse::<i32>() {
Ok(second_number) => second_number,
Err(e) => return Err(AnotherError::ParseError("error")),
};
Ok(first_number * second_number)
}
我的意思是这样的:
use std::num::ParseIntError;
fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
let first_number = first_number_str.parse::<i32>()
.unwrap_or_return(|e| Err(e));
let second_number = second_number_str.parse::<i32>()
.unwrap_or_return(|e| Err(AnotherError::ParseError("error"));
Ok(first_number * second_number)
}
【问题讨论】:
-
这类似于:stackoverflow.com/questions/51344951/… 但不完全一样。
-
AnotherError::ParseError到底是什么?返回类型表明它的类型为ParseIntError。 -
你说得对,它更像是伪代码。我的意思是返回可能是另一个错误甚至是好的(某事)。