我使用match
查看字符串输入是否为位置,如果是,则将其转换为元组。例如," B6"会变成(1,5)。我有函数is_pos
来计算正确的输入,parse_pos
来转换它,所以每个match
需要执行两次字符串解析。
fn main() {
let input = ""
match input {
"exit" => return,
_ if is_pos(input) => parse_pos(input),
_ => (0, 0),
};
}
fn is_pos(str: &str) -> bool {
// string processing
true
}
fn parse_pos(str: &str) -> u32 {
// the same string processing
5
}
我有一个返回Option
的函数。然后匹配将选择Option
如果它不是没有,我可以打开它而不需要重做字符串解析。
这可能是match
,还是我应该回到使用if语句?
答案 0 :(得分:3)
没有优雅的方法来保存if
子句的中间结果。是的,您可以回到if
声明。
if input == "exit" {
return;
}
let pos = parse_pos(input).unwrap_or((0, 0));
你仍然可以使用这样的match
:
let pos = match input {
"exit" => return,
_ => parse_pos(input).unwrap_or((0, 0)),
};
(请注意,这里的早期回归并不是很突出。对未来的读者来说可能是一个问题。)