gpt4 book ai didi

rust - 可变地借用一个结构字段,同时在闭包中借用另一个

转载 作者:行者123 更新时间:2023-11-29 07:44:06 33 4
gpt4 key购买 nike

我有一个包含两个字段的结构,我想使用另一个字段(不可变借用)修改一个字段(可变借用),但我从借用检查器中收到错误消息。

例如下面的代码:

struct Struct {
field1: Vec<i32>,
field2: Vec<i32>,
}

fn main() {
let mut strct = Struct {
field1: vec![1, 2, 3],
field2: vec![2, 3, 4],
};

strct.field1.retain(|v| !strct.field2.contains(v));

println!("{:?}", strct.field1);
}

出现以下错误:

error[E0502]: cannot borrow `strct.field1` as mutable because it is also borrowed as immutable
--> src/main.rs:12:5
|
12 | strct.field1.retain(|v| !strct.field2.contains(v));
| ^^^^^^^^^^^^^------^---^^-----^^^^^^^^^^^^^^^^^^^^
| | | | |
| | | | first borrow occurs due to use of `strct` in closure
| | | immutable borrow occurs here
| | immutable borrow later used by call
| mutable borrow occurs here

在闭包中使用另一个字段更新一个字段的 Rust 方法是什么?

最佳答案

通常借用检查器可以区分结构的不同字段,但这在闭包 (lambda) 中不起作用。

相反,借用闭包外的第二个字段:

let field2 = &strct.field2;
strct.field1.retain(|v| !field2.contains(v));

关于rust - 可变地借用一个结构字段,同时在闭包中借用另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379242/

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