【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。

相关推荐
时空系10 小时前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust
时空系10 小时前
第10篇:归属权与借用——Rust的安全保障 Rust中文编程
开发语言·安全·rust
时空系10 小时前
第6篇:数据容器——管理大量数据 Rust中文编程
开发语言·后端·rust
时空系11 小时前
第7篇:功能——打造你的工具箱 Rust中文编程
开发语言·网络·rust
qcx2314 小时前
拆解 Warp AI Agent(五):跨生态联邦——10 种 Skill + MCP + 多 Harness 互操作设计
人工智能·rust·ai agent·skill·warp·mcp·harness
时空系14 小时前
第8篇:结构模板——自定义数据类型 Rust中文编程
开发语言·网络·rust
冬奇Lab1 天前
一天一个开源项目(第89篇):Warp - AI 驱动的现代化 Rust 终端
人工智能·rust·开源
时空系1 天前
第2篇:数据与数据类型——存储信息的小盒子 Rust中文编程
开发语言·后端·rust