面试题答案
一键面试struct MyStruct {
my_string: String,
}
fn modify_string(s: &mut MyStruct) {
// 使用不可变引用打印字符串
println!("原始字符串: {}", &s.my_string);
// 使用可变引用修改字符串
s.my_string.push_str(" 修改后的内容");
}
在Rust中,同一作用域内可变引用和不可变引用共存的规则如下:
- 规则:
- 同一时间内,对同一数据只能有一个可变引用。
- 同一时间内,可以有多个不可变引用。
- 不可变引用和可变引用不能同时存在。
可能遇到的编译错误:
如果违反上述规则,会遇到编译错误,错误信息通常会提示类似于 cannot borrow <variable> as mutable because it is also borrowed as immutable
,即不能将某个变量作为可变引用借用,因为它已经被作为不可变引用借用了。
解决方法:
- 分开作用域:将不可变引用和可变引用放在不同的作用域中,这样它们就不会同时存在。例如:
{
let s = &s.my_string;
println!("原始字符串: {}", s);
}
s.my_string.push_str(" 修改后的内容");
- 提前结束不可变借用:在进行可变借用之前,确保不可变借用已经结束。例如,如果不可变借用是通过函数调用返回的,可以在可变借用之前让该函数返回值超出作用域。