元组元素可能有副作用,其中一些可能依赖于其他元素。考虑这个程序:
fn main() {
let mut v = vec![1, 2];
match (v.pop(), v.pop()) {
(Some(z), Some(y)) => println!("y = {}, z = {}", y, z),
_ => unreachable!(),
}
}
它输出y = 1, z = 2
还是y = 2, z = 1
?Rust Playground上的几轮表明前者在稳定的 1.32.0 上,但如果我运行它更多次,重新编译编译器,更改编译器版本等,它可能会改变。
是否有书面承诺或至少打算维持对元组的特定评估顺序(例如深度优先和从左到右)?