rust - 是否可以修改正在模式匹配的值?
问题描述
在下面的程序中,我尝试创建一个change
函数来可变地修改数据类型的构造函数:
enum Typ {
Foo { x: u32 },
Bar { x: u32 },
}
use Typ::*;
fn change(val: &mut Typ) {
match val {
&mut Foo { ref mut x } => *val = Bar { x: *x },
&mut Bar { ref mut x } => *val = Foo { x: *x },
}
}
fn main() {
let mut val = Foo { x: 1 };
change(&mut val);
println!("Hello, world!");
}
这不起作用:
error[E0506]: cannot assign to `*val` because it is borrowed
--> src/main.rs:9:35
|
9 | &mut Foo { ref mut x } => *val = Bar { x: *x },
| --------- ^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `*val` occurs here
| |
| borrow of `*val` occurs here
error[E0506]: cannot assign to `*val` because it is borrowed
--> src/main.rs:10:35
|
10 | &mut Bar { ref mut x } => *val = Foo { x: *x },
| --------- ^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `*val` occurs here
| |
| borrow of `*val` occurs here
是否可以在其模式匹配子句中修改某些内容?
解决方案
推荐阅读
- go - go.mod 中的模块名称别名
- python - 在 Jupyter 的 Markdown 中加载纯文本内联
- dictionary - 如何在prefix_之后添加任何符号?
- google-cloud-firestore - Firestore 规则:在已定义规则的空集合上获得权限被拒绝
- css - SVG 中的阴影不是多重的,并且在不同的背景上颜色不同
- flutter - 如何获取 DocumentSnapshot 以按文档 ID 查询
- python - 从 find_all_palindromes 函数创建一个longest_palindrome 函数
- c++ - OpenCV:使用 PGM 文件。为什么我生成的 PGM 文件有 3 个通道 (RGB)?
- or-tools - Google ORTools - 不能共享相同路由的节点
- python - 如果我只传递一个参数,为什么会得到 TypeError?