我在构造函数 - Rustonomicon中没有找到任何相关的参考资料。以下代码是否保证可行...
struct Mutates {
n: usize,
}
impl Mutates {
fn side_effects(&mut self) -> usize {
self.n += 1;
self.n
}
}
#[derive(Debug)]
struct Struct {
a: usize,
b: usize,
}
fn main() {
let mut m = Mutates { n: 0 };
// note the order of the fields
dbg!(Struct {
a: m.side_effects(),
b: m.side_effects(),
});
dbg!(Struct {
b: m.side_effects(),
a: m.side_effects(),
});
}
...将始终打印以下内容?
[src/main.rs:22] Struct{a: m.side_effects(), b: m.side_effects(),} = Struct {
a: 1,
b: 2,
}
[src/main.rs:26] Struct{b: m.side_effects(), a: m.side_effects(),} = Struct {
a: 4,
b: 3,
}
编译器是否可以分配不同的值?
请注意,该问题是关于字段初始化的顺序,而不是声明的顺序。
请注意,此问题特别询问结构体,而不是元组,这在Rust中元组的评估顺序是什么? 中有所回答。
struct-order-of-eval-1.rs
,struct-order-of-eval-2.rs
等)。 - Lonami