gpt4 book ai didi

rust - 如何在嵌套匹配语句中多次访问可变向量?

转载 作者:行者123 更新时间:2023-11-29 08:27:02 24 4
gpt4 key购买 nike

我有以下代码:

enum T {
A(bool),
B(u8),
}

fn main() {
let mut a = vec![T::A(true), T::B(42)];
match a[0] {
T::A(value) => println!("A: {}", value),
T::B(ref mut b) => {
match a[1] {
T::A(value) => println!("One more A: {}", value),
T::B(ref mut value) => *value += 1,
}
*b += 1
}
}
}

编译器提示:

error[E0499]: cannot borrow `a` as mutable more than once at a time
--> src/main.rs:11:19
|
8 | match a[0] {
| - first mutable borrow occurs here
...
11 | match a[1] {
| ^ second mutable borrow occurs here
...
17 | }
| - first borrow ends here

我知道问题是因为我有两个对 a 的可变引用,但我找不到解决方案。

最佳答案

如果您愿意为第一场比赛保留一份副本,您可以这样做:

#[derive(Debug, Copy, Clone)]
enum T {
A(bool),
B(u8),
}

fn main() {
let mut a = vec![T::A(true), T::B(42)];
let first = a[0]; // make a copy
match first {
// match on the copy
T::A(value) => println!("A: {}", value),
T::B(b) => {
match a[1] {
T::A(value) => println!("One more A: {}", value),
T::B(ref mut value) => *value += 1,
}
a[0] = T::B(b + 1) // then update the vector
}
}
println!("{:?}", a); // the original didn't get split
}

如果您的类型是 Clone 而不是 Copy,这也应该与 Clone 一起使用。另一种选择是按照问题评论中的建议使用 split_at_mut()

关于rust - 如何在嵌套匹配语句中多次访问可变向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48329804/

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