面试题答案
一键面试struct MyStruct {
data1: i32,
data2: String,
}
fn modify_struct_field(mut my_struct: &mut MyStruct) {
// 读取其他字段
let data1 = my_struct.data1;
println!("Read data1: {}", data1);
// 修改某个字段
my_struct.data2.push_str(" modified");
}
在Rust中,要修改结构体实例的字段,需要使用可变引用。在函数签名中,mut my_struct: &mut MyStruct
表明 my_struct
是一个指向 MyStruct
实例的可变引用。
当函数内部需要读取结构体的其他字段时,由于 my_struct
已经是可变引用,所以可以直接读取。如果在读取字段之后再修改字段,是不会有编译错误的。但需要注意,Rust的借用规则不允许同时存在对同一数据的可变引用和不可变引用,以确保内存安全。在这个例子中,我们通过确保在修改字段之前读取所需的字段,从而避免了违反借用规则的情况。
使用该函数的示例:
fn main() {
let mut my_struct = MyStruct {
data1: 42,
data2: "original".to_string(),
};
modify_struct_field(&mut my_struct);
println!("Modified data2: {}", my_struct.data2);
}