好神奇的rust

62 阅读1分钟

rust 引用规则: 要么 只能有一个可变引用,要么 只能有多个不可变引用

// change 函数 
fn change(s:&mut String){
    s.clear();  // 清空
}

这样不可以编译

let mut s = String::from("abed");
let s_str_1 = &s[..1]; // 不可变引用 ?
change(&mut s); //可变引用
println!("mut s={}",s);
let s_str_2 = &s_str_1[..1]; // 不可变引用 ?
println!("mut s={},s_str_1={},s_str_2={}",s,s_str_1,s_str_2);

image.png

这样就可以编译,导致运行panic;

let mut s = String::from("abed");
change(&mut s); //可变引用
println!("mut s={}",s);
let s_str_1 = &s[..1]; // 不可变引用 ?
let s_str_2 = &s_str_1[..1]; // 不可变引用 ?
println!("mut s={},s_str_1={},s_str_2={}",s,s_str_1,s_str_2);

image.png

为啥一个可以编译,一个不可以编译呢,新手求解答。