if-let有一对短路吗?

Mar*_*iro 5 operator-precedence rust

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

if let (Some(x), Some(y)) = (f(), g()) {
    h();
}
Run Code Online (Sandbox Code Playgroud)

如果f()退货None,会g()被评估吗?规范是否保证或禁止评估?

Seb*_*edl 7

它没有捷径.抵靠一对模式匹配,一对必须被完全构造的,这意味着既f与g已被调用.没有延迟评估,模式匹配可能在计算值之前发生.

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