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

相关文章:

  • Linux parted问题:指定分区边界失效
  • 【vue vapor jsx 未雨绸缪】
  • C# 基于halcon的视觉工作流-章23-圆查找
  • Spring Boot2 静态资源、Rest映射、请求映射源码分析
  • Sklearn 机器学习 数值指标 均方误差MSE
  • 初探HashMap中的HashCode方法
  • Java——Spring框架全面解析
  • Seaborn可视化
  • 如何理解SpringBoot starters的自动装配
  • 【linux】Haproxy七层代理
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • docker-compose up -d 显示no configuration file provided: not found什么问题
  • 【C++】二叉搜索数
  • CIU32L051 DMA+Lwrb环形队列实现串口无阻塞性数据的收发 + 数据百分百不丢失的实现
  • Effective C++ 条款01:视 C++ 为一个语言联邦
  • php算法-- 关联数组使用,优化sip账号去重
  • MyBatis高级应用实战指南
  • 构建跨平台远程医疗系统中的视频通路技术方案探究
  • OT82111_VC1:USB OTG音频解码器固件技术解析
  • 华为昇腾NPU卡 文生音频[T2A]大模型suno/bark模型推理使用
  • Java研学-RabbitMQ(三)
  • 杂谈:前端开发中的常见问题
  • XCTF-crypto-幂数加密
  • iOS WebView 调试实战,文件上传与权限弹窗异常的排查路径
  • Oracle MCP本地部署测试
  • 卸油管连接检测误报率↓78%:陌讯多模态融合算法实战解析
  • [Rust 基础课程]猜数字游戏-获取用户输入并打印
  • 在Akamai云平台上为UGC流媒体进行实时转码
  • 百度快排技术分析的核心要素
  • AI小智源码分析——音频部分(一)