gpt4 book ai didi

vector - 嵌套数据结构的 Rust 可变性

转载 作者:行者123 更新时间:2023-12-03 11:24:19 27 4
gpt4 key购买 nike

谁能解释为什么下面的代码会编译,但如果我注释掉一行,那么它不会,即使代码本质上在做同样的事情?

struct OtherStruct {
x: i32,
}

struct Inner {
blah: i32,
vector: Vec<OtherStruct>
}

struct Outer {
inner: Inner,
}

impl Inner {
pub fn set_blah(&mut self, new_val : i32) {
self.blah = new_val;
}
}

fn main() {
let mut outer = Outer {
inner: Inner {
blah: 10,
vector: vec![
OtherStruct { x: 1 },
OtherStruct { x: 2 },
OtherStruct { x: 3 },
OtherStruct { x: 4 },
OtherStruct { x: 5 },
]
}
};

for item in outer.inner.vector.iter() {
println!("{}", item.x);
outer.inner.blah = 4;
//outer.inner.set_blah(6);
}

}
编译器错误是:
   |
34 | for item in outer.inner.vector.iter() {
| -------------------------
| |
| immutable borrow occurs here
| immutable borrow later used here
...
37 | outer.inner.set_blah(6);
| ^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
这对我来说很有意义,我想我想知道为什么当我不使用函数调用时我可以逃脱它,肯定会出现相同的可变性问题吗?

最佳答案

set_blah需要借整个Inner结构对象。分配给 blah只需要借用字段本身,因为它还没有被借用,所以有效。

关于vector - 嵌套数据结构的 Rust 可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63771543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com