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

一、源码

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

rust 复制代码
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. 导入依赖
rust 复制代码
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
rust 复制代码
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
rust 复制代码
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。

相关推荐
红烧code10 小时前
【Rust GUI开发入门】编写一个本地音乐播放器(11. 支持动态明暗主题切换)
rust·gui·theme·slint
红烧code11 小时前
【Rust GUI开发入门】编写一个本地音乐播放器(7. 制作歌词显示面板)
rust·gui·slint
JordanHaidee16 小时前
【Rust GUI开发入门】编写一个本地音乐播放器(13. 实现按键绑定)
rust
JordanHaidee16 小时前
【Rust GUI开发入门】编写一个本地音乐播放器(14. 应用打包-制作安装程序)
rust
JordanHaidee17 小时前
【Rust GUI开发入门】编写一个本地音乐播放器(12. 国际化应用-多语言支持)
rust
红烧code1 天前
【Rust GUI开发入门】编写一个本地音乐播放器(4. 绘制按钮组件)
rust·gui·svg·slint
朝阳5811 天前
使用过程宏实现自动化新增功能
后端·rust
JordanHaidee1 天前
【Rust GUI开发入门】编写一个本地音乐播放器(8. 从文件中提取歌曲元信息)
rust
清心9151 天前
Windows系统Rust安装与配置,解决安装慢问题
rust
清心9152 天前
Windows系统Rust安装,自定义安装目录
rust