if-let有一对短路吗?

时间:2016-06-30 08:04:28

标签: rust operator-precedence

假设f()g()返回Option<T>

if let (Some(x), Some(y)) = (f(), g()) {
    h();
}

如果f()返回None,是否会对g()进行评估?规范是否保证或禁止评估?

1 个答案:

答案 0 :(得分:7)

它没有捷径。要与该对进行模式匹配,必须完全构造该对,这意味着已调用fg。在计算值之前,模式匹配可能没有延迟评估。

(顺便说一句,它很容易尝试,而且Rust编译器现在 是规范。)