匹配和解析时避免冗余工作

时间:2017-04-08 18:45:55

标签: rust

我使用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语句?

1 个答案:

答案 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)),
};

(请注意,这里的早期回归并不是很突出。对未来的读者来说可能是一个问题。)