一、源碼
這段代碼定義了一個 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)或類型級編程的高級用例,可以在編譯時捕獲更多不變量,提高類型安全性。