【unitrix】 6.1 类型化整数特征(t_int.rs)
一、源码
这段代码定义了一个 Rust 特征(trait)TInt 和一些实现,用于表示类型化的整数。
use crate::number::{Null, B, Bit, TNumber};/// 类型化整数标记特征
///
/// 要求:
/// - 实现 `TNumber`
/// - 可复制 (`Copy`)
/// - 默认构造 (`Default`)
/// - 静态生命周期 (`'static`)
pub trait TInt: TNumber + Copy + Default + 'static {}// 为所有合法组合实现TInt
impl<L: Bit> TInt for B<Null, L> {} // 0 或 -1
impl<H: TInt, L: Bit> TInt for B<H, L> {} // 递归实现所有二进制数
二、源码分析
- TInt 特征定义:
pub trait TInt: TNumber + Copy + Default + 'static {}
-
TInt 是一个标记特征(marker trait),它本身没有方法
-
要求实现者必须同时实现:
-
TNumber(另一个表示数字的特征)
-
Copy(允许按位复制)
-
Default(提供默认值)
-
'static(静态生命周期)
-
- 实现部分:
- 第一个实现:
impl<L: Bit> TInt for B<Null, L> {}
-
为 B<Null, L> 类型实现 TInt,其中 L 需要实现 Bit 特征
-
这表示以 Null 为高位、任意 Bit 为最低位的二进制数
-
注释说明这表示 0 或 -1(是二进制补码表示的最小值)
-
第二个实现:
impl<H: TInt, L: Bit> TInt for B<H, L> {}
-
这是一个递归实现,为所有高位 H 实现 TInt、低位 L 实现 Bit 的 B<H, L> 类型实现 TInt
-
这允许构建任意长度的二进制数类型
- 类型参数:
-
B 是一个二进制数的类型构造器,接受高位和低位类型
-
Null 表示终止
-
Bit 可能表示单个位(0 或 1)
- 整体设计:
-
这是一种类型级编程技术,在编译时用类型系统表示数字
-
可以用于需要编译时已知常量的场景,如物理单位、常量等
-
通过递归实现支持任意长度的二进制数表示
这种技术常见于依赖类型(dependent types)或类型级编程的高级用例,可以在编译时捕获更多不变量,提高类型安全性。