为什么在同一范围内可以进行多次可变借用?

问题描述 投票:2回答:1

我编写了这个代码,它不止一次地借用了一个可变变量并且没有任何错误地编译,但根据The Rust Programming Language,这不应该编译:

fn main() {
    let mut s = String::from("hello");

    println!("{}", s);
    test_three(&mut s);
    println!("{}", s);
    test_three(&mut s);
    println!("{}", s);
}

fn test_three(st: &mut String) {
    st.push('f');
}

(Qazxswpoi)

这是一个错误还是Rust中有新功能?

rust borrow-checker
1个回答
6
投票

这里没有什么奇怪的事情;每当playground函数结束其工作时(在调用之后),可变借用变为无效:

test_three

该函数不保持其参数 - 它只会改变它指向的fn main() { let mut s = String::from("hello"); println!("{}", s); // immutably borrow s and release it test_three(&mut s); // mutably borrow s and release it println!("{}", s); // immutably borrow s and release it test_three(&mut s); // mutably borrow s and release it println!("{}", s); // immutably borrow s and release it } 并在之后释放借用,因为它不再需要:

String
© www.soinside.com 2019 - 2024. All rights reserved.