【unitrix】 6.17 基本非负整数( BaseUnsigned )特质(base_unsigned.rs)
一、源码
这段代码定义了一个 Rust trait BaseUnsigned 并为几种无符号整数类型实现了这个 trait。
use core::ops::{Not, Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
/// 基础非负整数类型标记特征
///
/// 要求实现基本算术运算和常见特征
pub trait BaseUnsigned:BaseNumber +Not +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}// 为标准整数类型实现BaseInt
impl BaseUnsigned for u8 {}
impl BaseUnsigned for u16 {}
impl BaseUnsigned for u32 {}
impl BaseUnsigned for u64 {}
impl BaseUnsigned for u128 {}
impl BaseUnsigned for usize {}
二、
- 导入依赖
use core::ops::{Not, Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
-
从 core::ops 模块导入了一系列运算符 trait(Not, Neg, Add 等),这些 trait 允许类型重载对应的运算符(!, -, +, -, *, /, +=, -=)。
-
从当前 crate 的 number 模块导入 BaseNumber trait。
- BaseUnsigned Trait 定义
pub trait BaseUnsigned:BaseNumber +Not +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}
BaseUnsigned 是一个标记 trait(没有定义任何方法),它要求实现它的类型必须满足以下所有条件:
-
实现 BaseNumber trait(基础数值 trait)
实现一系列运算符 trait:
-
Not(! 运算符)
-
Neg(- 运算符)
-
Add(+ 运算符,输出类型为 Self)
-
Sub(- 运算符,输出类型为 Self)
-
Mul(* 运算符,输出类型为 Self)
-
Div(/ 运算符,输出类型为 Self)
-
AddAssign(+= 运算符)
-
SubAssign(-= 运算符)
-
实现 Copy 和 Clone trait(表示类型可以按位复制)
-
实现 Default trait(类型有默认值)
-
实现 Sized trait(类型大小在编译时已知)
-
生命周期约束 'static(类型不包含非静态引用,或者可以存活整个程序生命周期)
-
- 为无符号整数类型实现 BaseUnsigned
impl BaseUnsigned for u8 {}
impl BaseUnsigned for u16 {}
impl BaseUnsigned for u32 {}
impl BaseUnsigned for u64 {}
impl BaseUnsigned for u128 {}
impl BaseUnsigned for usize {}
这些实现表明 u8、u16、u32、u64、u128 和 usize 都满足 BaseUnsigned 的所有约束条件。Rust 的标准库已经为这些类型实现了所有必要的 trait(如 Add、Sub、Copy 等),因此这里可以直接为空实现。
三、总结
这段代码定义了一个 BaseUnsigned trait,用于标记那些满足以下条件的类型:
-
是基础数值类型(BaseNumber)
-
支持常见算术运算
-
是可复制、可克隆、有默认值的
-
大小固定且生命周期为 'static
然后为 Rust 的所有标准无符号整数类型实现了这个 trait。这种设计通常用于泛型约束,确保泛型类型参数具有所需的操作和能力。