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

【unitrix】 6.5 基础整数类型特征(base_int.rs)

一、源码

这段代码定义了一个名为 BaseInt 的 trait(特征),用于标记基础整数类型,并为其实现基本的算术运算和常见 trait。然后,它为标准 Rust 整数类型(如 i8、i16、i32 等)实现了这个 trait。

use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
/// 基础整数类型标记特征
/// 
/// 要求实现基本算术运算和常见特征
pub trait BaseInt:BaseNumber +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}// 为标准整数类型实现BaseInt
impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}

二、代码解析

  1. 导入依赖

use core::ops::{Neg, Add, Sub, Mul, Div, AddAssign, SubAssign};
use crate::number::BaseNumber;
  • core::ops:从 Rust 的核心库导入运算符 trait,包括:
    • Neg(取负 -)

    • Add(加法 +)

    • Sub(减法 -)

    • Mul(乘法 *)

    • Div(除法 /)

    • AddAssign(+=)

    • SubAssign(-=)

  • BaseNumber:从当前 crate 导入 BaseNumber trait,是更基础的数值类型约束(如 Copy、Sized 等)。
  1. 定义 BaseInt trait

pub trait BaseInt:BaseNumber +Neg +Add<Output = Self> +Sub<Output = Self> +Mul<Output = Self> +Div<Output = Self> +AddAssign +SubAssign +Copy +Clone +Default +Sized +'static
{}

BaseInt 是一个 trait bound(特征约束),它要求所有实现它的类型必须满足以下条件:

  1. 继承 BaseNumber(更基础的数值 trait)。
  2. 支持算术运算:
  • Neg(取负 -x)

  • Add(加法 x + y,返回 Self)

  • Sub(减法 x - y,返回 Self)

  • Mul(乘法 x * y,返回 Self)

  • Div(除法 x / y,返回 Self)

  • AddAssign(x += y)

  • SubAssign(x -= y)

  1. 支持常见 trait:
  • Copy(按位复制)

  • Clone(显式克隆)

  • Default(默认值,如 0)

  • Sized(编译期已知大小)

  • 'static(生命周期约束,表示类型不包含非 'static 引用)

  1. 为标准整数类型实现 BaseInt

impl BaseInt for i8 {}
impl BaseInt for i16 {}
impl BaseInt for i32 {}
impl BaseInt for i64 {}
impl BaseInt for i128 {}
impl BaseInt for isize {}
  • 为 Rust 的所有标准有符号整数类型实现 BaseInt:

    • i8、i16、i32、i64、i128(固定位宽整数)

    • isize(指针大小的整数,32/64 位取决于平台)

      由于这些类型已经实现了 BaseInt 的所有约束(如 Add、Copy 等),所以 impl 块是空的,只是“标记”它们符合 BaseInt。

http://www.lryc.cn/news/591412.html

相关文章:

  • 对比分析:给数据找个 “参照物”,让孤立数字变 “决策依据”
  • 数据呈现进阶:漏斗图与雷达图的实战指南
  • SQLite的可视化界面软件的安装
  • H3CNE 综合实验二解析与实施指南
  • 医院各类不良事件上报,PHP+vscode+vue2+element+laravel8+mysql5.7不良事件管理系统源代码,成品源码,不良事件管理系统
  • ASP .NET Core 8实现实时Web功能
  • linux-SSH
  • Django由于数据库版本原因导致数据库迁移失败解决办法
  • 从C#6天学会Python:速通基础语法(第一天)
  • C#监听txt文档获取新数据
  • [IRF/Stack]华为/新华三交换机堆叠配置
  • 虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?
  • C语言模拟面向对象三大特性与C++实现对比
  • Python 网络爬虫 —— 提交信息到网页
  • Hyperledger Fabric:构建企业区块链网络的实践指南
  • AI赋能农业:基于YOLO11的苹果瑕疵检测系统实战分享
  • 寻找数组中的多数元素:HashMap方法解析
  • 深入了解linux系统—— 信号的捕捉
  • 防止电脑息屏 html
  • 人类社会发展过程中的熵增定律
  • 共指消解技术全解析:从语言学规则到深度学习(附论文精读)
  • 01-提问的艺术:如何让AI听懂“人话”
  • Day23| 39. 组合总和、40.组合总和II、131.分割回文串
  • 【47】MFC入门到精通——MFC编辑框 按回车键 程序闪退问题 ,关闭 ESC程序退出 问题
  • 泛型与类型安全深度解析及响应式API实战
  • python网络爬虫(第二步:安装浏览器驱动,驱动浏览器加载网页、批量下载资源)
  • 板凳-------Mysql cookbook学习 (十一--------12)
  • 20250717在荣品的PRO-RK3566开发板的Android13系统下解决点屏出现问题unsupport command data type: 217
  • x3CTF-2025-web-复现
  • 深度学习 -- Tensor属性及torch梯度计算