当前位置: 首页 > news >正文

【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)或类型级编程的高级用例,可以在编译时捕获更多不变量,提高类型安全性。

http://www.dtcms.com/a/282317.html

相关文章:

  • 深入理解-Java-线程池:原理、动态调整与监控实践
  • 牛市看涨期权的价差策略是什么?
  • mongoDB初始化项目简单操作示例
  • YAML 自动化用例中 GET vs POST 请求的参数写法差异
  • 部分排序算法的Java模拟实现(复习向,非0基础)
  • PostgreSQL数据库集群如何进行自动化性能监测?
  • HTML5》》template
  • (LeetCode 面试经典 150 题) 205. 同构字符串 (哈希表)
  • 针对 Python、Java、Go 的依赖树检测实现方案,包含漏洞扫描和依赖关系分析的核心代码与工具链
  • Chrome紧急更新,谷歌修复正遭活跃利用的关键零日漏洞
  • Java运维之Tomcat升级
  • 【c++深入系列】:万字详解list(附模拟实现的list源码)
  • Android 高通平台修改音频参数效果文件-优化音频效果
  • 如何使用 OpenCV 打开指定摄像头
  • 微服务变更?自动化测试利器Parasoft SOAtest修复快、准、稳!
  • 【微服务】Ocelot微服务网关
  • RL-马尔科夫过程、动态规划
  • 042_封装的实现(属性私有化 / 方法公开)
  • 网络基础10 长途互联--WAN广域网技术
  • fastadmin中ajax弹窗修改文字为英文
  • Taro.getRandomValues() 用法详解
  • 端侧推理软件栈
  • 搜索框的显示与隐藏(展开与收起)
  • 智能工厂生产设备状态检测算法
  • Navicat Premium17.2.8 下载与安装(免费版)
  • 数字万用表是什么?七位半数字万用表/多用表的核心指标应用及技术趋势?
  • 近期学习总结
  • ADS8331手册驱动开发
  • HTML基础知识 二(创建容器和表格)
  • 达梦数据库CASE_SENSITIVE大小写敏感差异比较