标签: rust operator-precedence
假设f()和g()返回Option<T>。
f()
g()
Option<T>
if let (Some(x), Some(y)) = (f(), g()) { h(); }
如果f()返回None,是否会对g()进行评估?规范是否保证或禁止评估?
None
答案 0 :(得分:7)
它没有捷径。要与该对进行模式匹配,必须完全构造该对,这意味着已调用f和g。在计算值之前,模式匹配可能没有延迟评估。
f
g
(顺便说一句,它很容易尝试,而且Rust编译器现在 是规范。)