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

【unitrix】 6.15 “非零非负一“的整数类型(NonZeroNonMinusOne)特质(non_zero_non_minus_one.rs)

一、源码

这段代码是用 Rust 语言实现的一个类型系统,用于表示和处理特定的整数类型。

use crate::number::{Null, O, I, B, TInt, Bit};// ==========NonZeroNonMinusOne 实现 ==========/// 非零非负一整数的标记特质,已经剔除了不规范格式
pub trait NonZeroNonMinusOne: TInt {}impl NonZeroNonMinusOne for B<B<Null, O>, I> {}  // 1
impl NonZeroNonMinusOne for B<B<Null, I>, O> {}  // -2
impl<H: NonZeroNonMinusOne, L: Bit>NonZeroNonMinusOne for B<H, L> {}

二、源码分析

  1. 导入依赖

use crate::number::{Null, O, I, B, TInt, Bit};

这行代码从当前 crate 的 number 模块中导入了一些类型和特质(trait),包括:

  • Null, O, I, B: 这些是表示二进制数字和结构的类型

  • TInt, Bit: 特质(trait),分别表示整数类型和位(bit)类型

  1. NonZeroNonMinusOne 特质

pub trait NonZeroNonMinusOne: TInt {}

定义了一个公共特质 NonZeroNonMinusOne,它表示"非零非负一"的整数类型。任何实现这个特质的类型都必须先实现 TInt 特质。
3. 特质实现

接下来是对 NonZeroNonMinusOne 的具体实现:
a. 第一种实现


impl NonZeroNonMinusOne for B<B<Null, O>, I> {}  // 1

这表示类型 B<B<Null, O>, I> 实现了 NonZeroNonMinusOne 特质。注释 // 1 表明这个类型代表数字 1。
b. 第二种实现


impl NonZeroNonMinusOne for B<B<Null, I>, O> {}  // -2

这表示类型 B<B<Null, I>, O> 实现了 NonZeroNonMinusOne 特质,代表数字 -2。
c. 泛型实现


impl<H: NonZeroNonMinusOne, L: Bit> NonZeroNonMinusOne for B<H, L> {}

这是一个泛型实现,表示对于任何:

  • H 类型:实现了 NonZeroNonMinusOne

  • L 类型:实现了 Bit
    的组合 B<H, L> 都实现了 NonZeroNonMinusOne 特质。

  1. 类型系统设计

这段代码展示了一个用类型系统表示数字的设计:

  • 使用 B 类型构造二进制表示的数字

  • Null 是泛型嵌套结束标识,表示该位为空

  • O 和 I 分别表示二进制位的 0 和 1

  • 通过嵌套的 B 类型构造更长的二进制数

  1. 目的

这个特质和实现的主要目的是:

  • 定义一个表示"非零且不等于-1"的整数类型的标记特质

  • 确保这些类型有正确的二进制表示形式

  • 通过类型系统在编译期保证数值的合法性

  • 该特质是根据构建类型级整数的特点标记的基本数类型,整型、非零整型等标记可以在此基础上扩展

这种设计常见于依赖类型系统或类型级编程的场景,可以在编译期捕获某些数值错误。

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

相关文章:

  • 亚马逊广告策略:如何平衡大词和长尾词的效果?
  • 倩女幽魂手游代言人杨洋携剑仙入世 仙姿临世锋芒毕露
  • docker-compose:未找到命令的检查步骤和修复
  • ABP VNext + OData:实现可查询的 REST API
  • 服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解
  • HCIP上HCIA复习静态综合实验
  • 移动端设备能部署的llm
  • 系统日志与用户信息绑定实现日志跟踪
  • 前端基础知识Vue系列 - 27(Vue项目中如何解决跨域)
  • 从 SQL Server 到 KingbaseES V9R4C12,一次“无痛”迁移与深度兼容体验实录
  • js基础概念-1
  • 牛客NC16660 [NOIP2004]FBI树(递归 + 二叉树后序遍历)
  • electron中IPC 渲染进程与主进程通信方法解析
  • 常用设计模式系列(十二)—享元模式
  • 如何在 FastAPI 中玩转 GraphQL 和 WebSocket 的实时数据推送魔法?
  • C++中使用Essentia实现STFT/ISTFT
  • git 连接GitHub仓库
  • 强化学习之策略熵坍塌优化-clip conv kv conv
  • 若依搭建详解
  • Android Paging 分页加载库详解与实践
  • 第七章 愿景11 琦琦复盘测试
  • Keepalived 深度技术解析与高可用实践指南
  • C++编程学习(第15天)
  • ServletRegistrationBean相关知识点
  • 用 Docker 一键部署 Flask + Redis 微服务
  • NX848NX854美光固态闪存NX861NX864
  • 截稿倒计时 TrustCom‘25大会即将召开
  • C++中AC、WA、RE、CE、TLE、MLE、PE、OLE的意思
  • 【ResNet50图像分类部署至RK3588】模型训练→转换RKNN→开发板部署
  • 安装本地python文件到site-packages