rust - 如何在不消耗值的情况下实现 Add trait
问题描述
当为一个简单的结构实现Add
特征(以及其他一些特征,如Mul
,Sub
等)时,必须完全消耗结构值,因此以后无法使用它。
同时,内置原语(u8
,usize
等)实现了在被调用Add
后允许使用它。add
如何实现Add
我的结构以便在调用后能够使用它add
?
use std::ops::Add;
struct I(usize);
impl Add for I {
type Output = Self;
fn add(self, rhs: Self) -> Self {
I(self.0 + rhs.0)
}
}
fn main() {
let a = 123;
let b = a + a; // no error
let a1 = I(123);
let b1 = a1 + a1;
println!("b={}", b);
}
error[E0382]: use of moved value: `a1`
--> src/main.rs:16:19
|
15 | let a1 = I(123);
| -- move occurs because `a1` has type `I`, which does not implement the `Copy` trait
16 | let b1 = a1 + a1;
| -- ^^ value used here after move
| |
| value moved here
解决方案
您应该能够添加#[derive(Copy, Clone)]
到结构中,然后它不会消耗该值,而是消耗一个副本。
推荐阅读
- python - 使用“NOT IN”时正在打印语句
- python - PyInstaller 失败
- docker - Gitlab docker 备份和恢复
- javascript - 需要帮助我对 discord.js 的取消静音命令
- vault - 使用 Vault.service 文件以开发模式启动 Vault Server
- python - 对 Dask 与 Pandas 进行基准测试时出现关键错误“负面评论”
- c# - 如何使用 Visual Studio 2019 中的控制台项目测试 .net 5 WPF 项目?
- javascript - 如何在 React 中动态映射另一个数组中的数组?
- python - 如何在不中断 python 中其他代码的情况下运行代码?
- regex - 正则表达式仅在单词不跟随另一个单词时才匹配单词