一、源码
这段代码定义了一个名为 BaseInt 的 trait(特征),用于标记基础整数类型,并为其实现基本的算术运算和常见 trait。然后,它为标准 Rust 整数类型(如 i8、i16、i32 等)实现了这个 trait。
use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
/// 基础整数类型标记特征
///
/// 要求实现基本算术运算和常见特征
pub trait BaseInt:
BaseNumber +
Neg +
Add<Output = Self> +
Sub<Output = Self> +
Mul<Output = Self> +
Div<Output = Self> +
AddAssign +
SubAssign +
Copy +
Clone +
Default +
Sized +
'static
{}
// 为标准整数类型实现BaseInt
impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}
二、代码解析
- 导入依赖
use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
- core::ops:从 Rust 的核心库导入运算符 trait,包括:
-
Neg(取负 -)
-
Add(加法 +)
-
Sub(减法 -)
-
Mul(乘法 *)
-
Div(除法 /)
-
AddAssign(+=)
-
SubAssign(-=)
-
- BaseNumber:从当前 crate 导入 BaseNumber trait,是更基础的数值类型约束(如 Copy、Sized 等)。
- 定义 BaseInt trait
pub trait BaseInt:
BaseNumber +
Neg +
Add<Output = Self> +
Sub<Output = Self> +
Mul<Output = Self> +
Div<Output = Self> +
AddAssign +
SubAssign +
Copy +
Clone +
Default +
Sized +
'static
{}
BaseInt 是一个 trait bound(特征约束),它要求所有实现它的类型必须满足以下条件:
- 继承 BaseNumber(更基础的数值 trait)。
- 支持算术运算:
-
Neg(取负 -x)
-
Add(加法 x + y,返回 Self)
-
Sub(减法 x - y,返回 Self)
-
Mul(乘法 x * y,返回 Self)
-
Div(除法 x / y,返回 Self)
-
AddAssign(x += y)
-
SubAssign(x -= y)
- 支持常见 trait:
-
Copy(按位复制)
-
Clone(显式克隆)
-
Default(默认值,如 0)
-
Sized(编译期已知大小)
-
'static(生命周期约束,表示类型不包含非 'static 引用)
- 为标准整数类型实现 BaseInt
impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}
-
为 Rust 的所有标准有符号整数类型实现 BaseInt:
-
i8、i16、i32、i64、i128(固定位宽整数)
-
isize(指针大小的整数,32/64 位取决于平台)
由于这些类型已经实现了 BaseInt 的所有约束(如 Add、Copy 等),所以 impl 块是空的,只是“标记”它们符合 BaseInt。
-