【unitrix】 6.16 非负整数类型( TUnsigned )特质(t_unsingned.rs)
一、源码
use crate::number::{Null, O, I, B, Bit, TInt, NonZeroNonMinusOne};// ==========TPositive 实现 ==========/// 无符号整数的标记特质
pub trait TPositive: NonZeroNonMinusOne {}impl TPositive for B<B<Null, O>, I> {} // 1
impl<H: TPositive, L: Bit> TPositive for B<H, L> {}// ========== TUnsigned 实现 ==========/// 无符号整数的标记特质
pub trait TUnsigned: TInt {}impl TUnsigned for B<Null, O> {} // 0
impl<X: TPositive> TUnsigned for X {} // 为避免引入不规范结构,单独定义TPositive特质
二、
这段代码继续扩展了基于类型系统的数字表示,定义了无符号整数(正数和零)的特质。我来详细解释每一部分:
- 导入部分
rust
use crate::number::{Null, O, I, B, Bit, TInt, NonZeroNonMinusOne};
这里导入了更多的类型和特质,包括之前定义的 NonZeroNonMinusOne。
2. TPositive 特质(正数)
rust
pub trait TPositive: NonZeroNonMinusOne {}
定义了一个表示正整数的特质 TPositive,它继承自 NonZeroNonMinusOne(非零非负一)。
实现部分:
rust
impl TPositive for B<B<Null, O>, I> {} // 1
表示数字 1(二进制表示为 B<B<Null, O>, I>)是一个正数。
rust
impl<H: TPositive, L: Bit> TPositive for B<H, L> {}
这是一个泛型实现,表示:
如果 H 是一个正数(TPositive)且 L 是一个位(Bit)
那么 B<H, L>(即在正数 H 后追加一个位 L)也是一个正数。
- TUnsigned 特质(无符号整数)
rust
pub trait TUnsigned: TInt {}
定义了一个表示无符号整数(即非负整数,包括零和正数)的特质 TUnsigned,它继承自 TInt。
实现部分:
rust
impl TUnsigned for B<Null, O> {} // 0
表示数字 0(二进制表示为 B<Null, O>)是一个无符号整数。
rust
impl<X: TPositive> TUnsigned for X {}
表示任何正数(TPositive)也都是无符号整数(TUnsigned)。注释说明这是为了避免引入不规范的结构而单独定义了 TPositive 特质。
4. 类型关系总结
TUnsigned(无符号整数)包含:零 (B<Null, O>)所有 TPositive(正数)TPositive(正数)是 NonZeroNonMinusOne(非零非负一)的特例
- 设计目的
这种设计实现了:
类型安全的无符号整数表示通过类型系统在编译期区分有符号数和无符号数确保数值的合法性(如排除不规范格式)支持类型级编程,可以在编译期进行数值计算和验证
这种模式常见于需要强类型保证的领域,如密码学、安全关键系统或形式验证等场景。