当前位置: 首页 > 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.lryc.cn/news/599366.html

相关文章:

  • XCTF-crypto-幂数加密
  • Docker 实战大纲
  • Windows Installer安全深度剖析
  • SQL基础⑭ | 变量、流程控制与游标篇
  • 解放生产力:Amazon API Gateway 与 Amazon Lambda 的优雅组合
  • adb 下载并安装
  • 使用Python绘制金融数据可视化工具
  • SR9900低功耗USB 2.0转百兆以太网控制器芯片,SR9900规格书,SR9900原理图
  • 【第四章:大模型(LLM)】01.神经网络中的 NLP-(1)RNN、LSTM 和 GRU 的基本原理和应用
  • Linux网络框架分析
  • 使用vllm创建相同模型的多个实例,使用nginx进行负载均衡,提高模型吞吐量
  • RabbitMQ—HAProxy负载均衡
  • 数仓主题域划分
  • [linux]Haproxy七层代理
  • Agent领域,近年来的前沿研究方向:多智能体协作、认知启发架构、伦理安全、边缘计算集成
  • 多租户系统中的安全隔离机制设计
  • 【数学建模|Matlab】数学建模「常用作图」示例
  • classgraph:Java轻量级类和包扫描器
  • 【深基12.例1】部分背包问题 Java
  • 深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
  • 本地部署Dify教程
  • 每天算法刷题Day53:7.25:leetcode 栈5道题,用时1h35min
  • [C#] Winform - 加载动画效果
  • 【blender小技巧】使用blender实现图转换为3D模型,并进行模型网格优化减面操作
  • 【C#学习Day12笔记】抽象类、密封类与子类构造(继承)
  • Welcome to the world of Go language
  • blender基本操作
  • gem5和Spike区别
  • 设计模式在Java中的实际应用:单例、工厂与观察者模式详解
  • AVL树和红黑树的特性以及模拟实现