在一个结构体中保持对一个字段的不可变引用,同时修改另一个字段是可以的。但是,如果所述结构体在Vec内部,这是不可能的。有什么替代数据结构可以实现这一点?
struct Data(String,i32);
fn main(){
let mut v = vec![Data("id".to_string(), 0)]; // Data instance owned by Vec
let reference_to_id = &v[0].0 as &str; // Reference to 1st field of Data to be stored elsewhere
v[0].1 = 1000; // Modifying 2nd field of Data
println!("{}", reference_to_id); // ERROR
}
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
--> r4.rs:5:5
|
4 | let reference_to_id = &v[0].0 as &str;
| - immutable borrow occurs here
5 | v[0].1 = 1000;
| ^ mutable borrow occurs here
6 |
7 | println!("{}", reference_to_id);
| --------------- immutable borrow later used here
我想在Vec中存储一堆struct示例,这些struct的“id”字段不会改变,我想在代码的其他部分使用对该字段的引用(&str)。这是否意味着,我不能修改这些struct中的任何字段?这感觉非常受限。
2条答案
按热度按时间hujrc8aj1#
借位检查器并不理解向量,但是你可以检索一个对该元素的引用,然后它就可以工作了:
vvppvyoh2#
这应该行得通。