【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> {} // 递归实现所有二进制数

二、源码分析

  1. TInt 特征定义:

pub trait TInt: TNumber + Copy + Default + 'static {}
  • TInt 是一个标记特征(marker trait),它本身没有方法

  • 要求实现者必须同时实现:

    • TNumber(另一个表示数字的特征)

    • Copy(允许按位复制)

    • Default(提供默认值)

    • 'static(静态生命周期)

  1. 实现部分:
  • 第一个实现:

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

  • 这允许构建任意长度的二进制数类型

  1. 类型参数:
  • B 是一个二进制数的类型构造器,接受高位和低位类型

  • Null 表示终止

  • Bit 可能表示单个位(0 或 1)

  1. 整体设计:
  • 这是一种类型级编程技术,在编译时用类型系统表示数字

  • 可以用于需要编译时已知常量的场景,如物理单位、常量等

  • 通过递归实现支持任意长度的二进制数表示

这种技术常见于依赖类型(dependent types)或类型级编程的高级用例,可以在编译时捕获更多不变量,提高类型安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyuan77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值