小编Rya*_*rew的帖子

函数返回不可变的引用,但借用检查器不这么认为

在这里,我将一些可变引用传递给一个函数以对它们执行一些操作。然后,我通过将它们转换为不可变引用来删除这些可变引用。然而,Rust 借用检查器似乎仍然认为它们是可变的。这是代码:

//! src/lib.rs
fn append_1_to_all(strings: Vec<&mut String>) -> Vec<&mut String> {
    strings.into_iter().map(|s| { s.push_str("1"); s }).collect()
}

fn get_shared_references(strings: Vec<&mut String>) -> Vec<&String> {
    strings.into_iter().map(|c| &(*c)).collect()
}

#[test]
fn test() {
    let strings = vec!["one".to_string(), "two".to_string(), "three".to_string()];
    let strings_appended = append_1_to_all(strings.iter_mut().collect());

    let strings_shared = get_shared_references(strings_appended);

    assert_ne!(strings[0], *strings_shared[0]);
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

error[E0502]: cannot borrow `strings` as immutable because it is also borrowed as mutable
  --> src/lib.rs:16:16
   |
12 |     let strings_appended = append_1_to_all(strings.iter_mut().collect());
   |                                            ------- mutable borrow occurs here
...
16 …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

1
推荐指数
1
解决办法
114
查看次数

标签 统计

borrow-checker ×1

rust ×1